Turned into menu scheduler

This commit is contained in:
Kumi 2020-05-16 21:06:08 +02:00
parent 41741ab37f
commit 21df0a32d3
9 changed files with 57 additions and 17 deletions

View file

@ -6,13 +6,11 @@ class EventForm(ModelForm):
model = Event model = Event
# datetime-local is a HTML5 input type, format to make date time show on fields # datetime-local is a HTML5 input type, format to make date time show on fields
widgets = { widgets = {
'start_time': DateInput(attrs={'type': 'datetime-local'}, format='%Y-%m-%dT%H:%M'), 'date': DateInput(format='%Y-%m-%d'),
'end_time': DateInput(attrs={'type': 'datetime-local'}, format='%Y-%m-%dT%H:%M'),
} }
fields = '__all__' fields = '__all__'
def __init__(self, *args, **kwargs): def __init__(self, *args, **kwargs):
super(EventForm, self).__init__(*args, **kwargs) super(EventForm, self).__init__(*args, **kwargs)
# input_formats parses HTML5 datetime-local input to datetime field # input_formats parses HTML5 datetime-local input to datetime field
self.fields['start_time'].input_formats = ('%Y-%m-%dT%H:%M',) self.fields['date'].input_formats = ('%Y-%m-%d',)
self.fields['end_time'].input_formats = ('%Y-%m-%dT%H:%M',)

View file

@ -2,12 +2,12 @@ from django.db import models
from django.urls import reverse from django.urls import reverse
class Event(models.Model): class Event(models.Model):
title = models.CharField(max_length=200) date = models.DateField()
description = models.TextField() brekky = models.CharField(max_length=255, blank=True, null=True)
start_time = models.DateTimeField() lunch = models.CharField(max_length=255, blank=True, null=True)
end_time = models.DateTimeField() dinner = models.CharField(max_length=255, blank=True, null=True)
@property @property
def get_html_url(self): def get_html_url(self):
url = reverse('cal:event_edit', args=(self.id,)) url = reverse('cal:event_edit', args=(self.id,))
return f'<a href="{url}"> {self.title} </a>' return f'<a href="{url}" style="color:burlywood;"> {self.brekky or "-"} </a><br/><a href="{url}" style="color:blue;"> {self.lunch or "-"} </a><br/><a href="{url}" style="color:green;"> {self.dinner or "-"} </a>'

View file

@ -1,4 +1,4 @@
{% load staticfiles %} {% load static %}
<!doctype html> <!doctype html>
<html lang="en"> <html lang="en">

View file

@ -0,0 +1,29 @@
<html>
<head>
<link rel="stylesheet" href="/static/frontend/assets/css/login.css">
<link href="https://fonts.googleapis.com/css?family=Ubuntu" rel="stylesheet">
<meta name="viewport" content="width=device-width, initial-scale=1" />
<link rel="stylesheet" href="path/to/font-awesome/css/font-awesome.min.css">
<title>Login</title>
</head>
<body>
<div class="main">
<p class="sign" align="center">Login</p>
<form class="form1" method="post">
{% csrf_token %}
<input class="un " type="text" align="center" name="username" placeholder="Benutzername">
<input class="pass" type="password" name="password" align="center" placeholder="Passwort">
<button class="submit" align="center">Einloggen</button>
</div>
</body>
</html>

View file

@ -1,10 +1,10 @@
from django.conf.urls import url from django.conf.urls import url
from django.urls import path
from . import views from . import views
app_name = 'cal' app_name = 'cal'
urlpatterns = [ urlpatterns = [
url(r'^index/$', views.index, name='index'), url(r'^$', views.CalendarView.as_view(), name='calendar'),
url(r'^calendar/$', views.CalendarView.as_view(), name='calendar'),
url(r'^event/new/$', views.event, name='event_new'), url(r'^event/new/$', views.event, name='event_new'),
url(r'^event/edit/(?P<event_id>\d+)/$', views.event, name='event_edit'), url(r'^event/edit/(?P<event_id>\d+)/$', views.event, name='event_edit'),
] ]

View file

@ -2,6 +2,8 @@ from datetime import datetime, timedelta
from calendar import HTMLCalendar from calendar import HTMLCalendar
from .models import Event from .models import Event
from django.urls import reverse_lazy
class Calendar(HTMLCalendar): class Calendar(HTMLCalendar):
def __init__(self, year=None, month=None): def __init__(self, year=None, month=None):
self.year = year self.year = year
@ -11,10 +13,13 @@ class Calendar(HTMLCalendar):
# formats a day as a td # formats a day as a td
# filter events by day # filter events by day
def formatday(self, day, events): def formatday(self, day, events):
events_per_day = events.filter(start_time__day=day) events_per_day = events.filter(date__day=day)
d = '' d = ''
for event in events_per_day: for event in events_per_day:
d += f'<li> {event.get_html_url} </li>' d += event.get_html_url
if not d:
d = f'<a href="{reverse_lazy("cal:event_new")}?date={self.year}-{self.month}-{day}">Create Menu</a>'
if day != 0: if day != 0:
return f"<td><span class='date'>{day}</span><ul> {d} </ul></td>" return f"<td><span class='date'>{day}</span><ul> {d} </ul></td>"
@ -30,7 +35,7 @@ class Calendar(HTMLCalendar):
# formats a month as a table # formats a month as a table
# filter events by year and month # filter events by year and month
def formatmonth(self, withyear=True): def formatmonth(self, withyear=True):
events = Event.objects.filter(start_time__year=self.year, start_time__month=self.month) events = Event.objects.filter(date__year=self.year, date__month=self.month)
cal = f'<table border="0" cellpadding="0" cellspacing="0" class="calendar">\n' cal = f'<table border="0" cellpadding="0" cellspacing="0" class="calendar">\n'
cal += f'{self.formatmonthname(self.year, self.month, withyear=withyear)}\n' cal += f'{self.formatmonthname(self.year, self.month, withyear=withyear)}\n'

View file

@ -1,9 +1,13 @@
from datetime import datetime, timedelta, date from datetime import datetime, timedelta, date
from django.shortcuts import render, get_object_or_404 from django.shortcuts import render, get_object_or_404
from django.http import HttpResponse, HttpResponseRedirect from django.http import HttpResponse, HttpResponseRedirect
from django.views import generic from django.views import generic
from django.urls import reverse from django.urls import reverse
from django.utils.safestring import mark_safe from django.utils.safestring import mark_safe
from django.contrib.auth.mixins import LoginRequiredMixin
from django.contrib.auth.decorators import login_required
import calendar import calendar
from .models import * from .models import *
@ -13,7 +17,7 @@ from .forms import EventForm
def index(request): def index(request):
return HttpResponse('hello') return HttpResponse('hello')
class CalendarView(generic.ListView): class CalendarView(LoginRequiredMixin, generic.ListView):
model = Event model = Event
template_name = 'cal/calendar.html' template_name = 'cal/calendar.html'
@ -46,6 +50,7 @@ def next_month(d):
month = 'month=' + str(next_month.year) + '-' + str(next_month.month) month = 'month=' + str(next_month.year) + '-' + str(next_month.month)
return month return month
@login_required
def event(request, event_id=None): def event(request, event_id=None):
instance = Event() instance = Event()
if event_id: if event_id:
@ -53,7 +58,7 @@ def event(request, event_id=None):
else: else:
instance = Event() instance = Event()
form = EventForm(request.POST or None, instance=instance) form = EventForm(request.POST or None, instance=instance, initial={"date": request.GET.get("date", "")} if not event_id else None)
if request.POST and form.is_valid(): if request.POST and form.is_valid():
form.save() form.save()
return HttpResponseRedirect(reverse('cal:calendar')) return HttpResponseRedirect(reverse('cal:calendar'))

View file

@ -19,4 +19,5 @@ from django.urls import path, include
urlpatterns = [ urlpatterns = [
path('admin/', admin.site.urls), path('admin/', admin.site.urls),
path('', include('cal.urls')), path('', include('cal.urls')),
path('accounts/', include('django.contrib.auth.urls')),
] ]

2
requirements.txt Normal file
View file

@ -0,0 +1,2 @@
django
mysqlclient