Merge branch 'master' into app.wiai.de

This commit is contained in:
clemens 2018-01-15 10:31:28 +01:00
commit 365ed3c04a
17 changed files with 230 additions and 76 deletions

View File

@ -0,0 +1,20 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.11.7 on 2018-01-11 11:46
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('donar', '0002_auto_20180105_1449'),
]
operations = [
migrations.AlterField(
model_name='lecture_terms',
name='starttime',
field=models.TimeField(),
),
]

View File

@ -48,7 +48,7 @@ class Lecture(models.Model):
class Lecture_Terms(models.Model):
id = models.AutoField(primary_key=True)
starttime = models.TimeField(blank=False, default=timezone.now())
starttime = models.TimeField(blank=False)
room = models.ManyToManyField('Room', blank=True)
def __str__(self):

View File

@ -2,15 +2,11 @@
from __future__ import unicode_literals
import datetime
import os
from django.conf import settings
from django.core.exceptions import ObjectDoesNotExist
from django.http import HttpResponseForbidden
from django.shortcuts import render
from pprint import pprint
from apps.food.models import Menu, SingleFood, UserFoodImage
from apps.food.models import SingleFood, UserFoodImage
def food_picture_management(request):
@ -31,7 +27,7 @@ def food_picture_save(request, id):
if (request.user.is_superuser):
chosen_pic = UserFoodImage.objects.get(id=id)
food = SingleFood.objects.get(id=chosen_pic.food.id)
food.image.set([chosen_pic, ])
food.image = chosen_pic.image
food.save()
return food_picture_management(request)

View File

@ -27,6 +27,7 @@ class SingleFoodSerializer(serializers.HyperlinkedModelSerializer):
class MenuSerializer(serializers.HyperlinkedModelSerializer):
date = serializers.DateField(format='iso-8601')
menu = SingleFoodSerializer(many=True, read_only=True)
location = serializers.ChoiceField(choices=Menu.LOCATION_CHOICES)
class Meta:
model = Menu

View File

@ -15,16 +15,17 @@ Including another URLconf
"""
from django.conf.urls import url
from apps.food.api import views as api_views
from apps.food.models import Menu
urlpatterns = [
# API Version 1.1
url(r'^food/$', api_views.FoodViewSetV1_1.as_view({'get': 'list'})),
url(r'^food/(?P<location>feldkirchenstrasse|markusstrasse|erba|austrasse)/$',
url(r'^food/(?P<location>' + Menu.FEKI + '|' + Menu.MARKUSPLATZ + '|' + Menu.ERBA + '|' + Menu.AUSTRASSE + ')/$',
api_views.FoodViewSetV1_1.as_view({'get': 'list'})),
url(r'food/(?P<year>[0-9]{4})/(?P<month>[0-9]{2})/(?P<day>[0-9]{2})/$',
api_views.FoodViewSetV1_1.as_view({'get': 'list'})),
url(
r'food/(?P<location>feldkirchenstrasse|markusstrasse|erba|austrasse)/(?P<year>[0-9]{4})/(?P<month>[0-9]{2})/(?P<day>[0-9]{2})/$',
r'food/(?P<location>' + Menu.FEKI + '|' + Menu.MARKUSPLATZ + '|' + Menu.ERBA + '|' + Menu.AUSTRASSE + ')/(?P<year>[0-9]{4})/(?P<month>[0-9]{2})/(?P<day>[0-9]{2})/$',
api_views.FoodViewSetV1_1.as_view({'get': 'list'})),
url(r'food/today/$', api_views.FoodViewSetV1_1.as_view({'get': 'list'})),
url(r'food/week/$', api_views.FoodViewSetV1_1.as_view({'get': 'list'})),

View File

@ -25,18 +25,17 @@ class FoodViewSet(viewsets.ModelViewSet, ):
queryset = Menu.objects.all()
location = self.request.query_params.get('location')
date = self.request.query_params.get('date')
print(str(location).upper() == Menu.ERBA.upper())
if location:
locations = ["erba", "feldkirchenstrasse", "austrasse", "markusplatz"]
if locations.__contains__(location):
if location == locations[0]:
queryset = queryset.filter(location__contains="Erba")
elif location == locations[1]:
queryset = queryset.filter(location__contains="Feldkirchen")
elif location == locations[2]:
queryset = queryset.filter(location__contains="austraße")
elif location == locations[3]:
queryset = queryset.filter(location__contains="markusplatz")
print(str(location).upper() == Menu.ERBA.upper())
if str(location).upper() is Menu.ERBA.upper():
queryset = queryset.filter(location_contains='Erba')
elif str(location).upper() is Menu.FEKI.upper():
queryset = queryset.filter(location=Menu.FEKI)
elif str(location).upper() is Menu.AUSTRASSE.upper():
queryset = queryset.filter(location=Menu.AUSTRASSE)
elif str(location).upper() is Menu.MARKUSPLATZ.upper():
queryset = queryset.filter(location=Menu.MARKUSPLATZ)
if date:
if date == "week":
today = datetime.now()
@ -82,19 +81,16 @@ class FoodViewSetV1_1(viewsets.ModelViewSet, ):
day = self.kwargs['day']
if location:
# TODO better way to get location list
locations = ["erba", "feldkirchenstrasse", "austrasse", "markusstrasse"]
if locations.__contains__(location):
print("Location: " + str(location))
if location == locations[0]:
queryset = queryset.filter(location__contains="Erba")
elif location == locations[1]:
queryset = queryset.filter(location__contains="Feldkirchen")
elif location == locations[2]:
queryset = queryset.filter(location__contains="Austraße")
elif location == locations[3]:
queryset = queryset.filter(location__contains="Markusplatz")
if str(location).upper() == Menu.ERBA.upper():
queryset = queryset.filter(location__contains=Menu.ERBA)
elif str(location).upper() == Menu.FEKI.upper():
queryset = queryset.filter(location__contains=Menu.FEKI)
elif str(location).upper() == Menu.AUSTRASSE.upper():
print("Before: " + str(queryset))
queryset = queryset.filter(location__contains=Menu.AUSTRASSE)
elif str(location).upper() == Menu.MARKUSPLATZ.upper():
queryset = queryset.filter(location__contains=Menu.MARKUSPLATZ)
print(queryset)
if year and month and day:
date = '%s-%s-%s' % (year, month, day)
queryset = queryset.filter(date=datetime.strptime(date, '%Y-%m-%d'))

View File

@ -1,8 +1,8 @@
from django import forms
from apps.food.models import UserFoodImage
from apps.food.models import FoodImage
class UploadImageForm(forms.ModelForm):
class Meta:
model = UserFoodImage
model = FoodImage
fields = ['image']

View File

@ -0,0 +1,20 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.11.7 on 2018-01-11 10:14
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('food', '0002_auto_20180105_1449'),
]
operations = [
migrations.AlterField(
model_name='menu',
name='location',
field=models.CharField(choices=[('ERBA', 'Erba'), ('MARKUSPLATZ', 'Markusplatz'), ('FEKI', 'Feldkirchenstrasse'), ('AUSTRASSE', 'Austrasse')], max_length=60),
),
]

View File

@ -0,0 +1,40 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.11.7 on 2018-01-11 11:46
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('food', '0003_auto_20180111_1114'),
]
operations = [
migrations.AlterField(
model_name='allergene',
name='name',
field=models.CharField(max_length=256, unique=True),
),
migrations.AlterField(
model_name='happyhour',
name='description',
field=models.CharField(max_length=256),
),
migrations.AlterField(
model_name='happyhour',
name='location',
field=models.CharField(max_length=256),
),
migrations.AlterField(
model_name='menu',
name='location',
field=models.CharField(choices=[('ERBA', 'Erba'), ('MARKUSPLATZ', 'Markusplatz'), ('FEKI', 'Feldkirchenstrasse'), ('AUSTRASSE', 'Austrasse')], max_length=256),
),
migrations.AlterField(
model_name='singlefood',
name='name',
field=models.CharField(max_length=256, unique=True),
),
]

View File

@ -0,0 +1,42 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.11.7 on 2018-01-12 23:23
from __future__ import unicode_literals
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('food', '0004_auto_20180111_1246'),
]
operations = [
migrations.CreateModel(
name='FoodImage',
fields=[
('id', models.AutoField(primary_key=True, serialize=False)),
('image', models.ImageField(blank=True, upload_to='food/originals/%Y/%m/%W')),
('thumb', models.ImageField(blank=True, upload_to='food/thumbs/%Y/%m/%W')),
],
),
migrations.RemoveField(
model_name='userfoodimage',
name='thumb',
),
migrations.RemoveField(
model_name='singlefood',
name='image',
),
migrations.AlterField(
model_name='userfoodimage',
name='image',
field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='food.FoodImage'),
),
migrations.AddField(
model_name='singlefood',
name='image',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, to='food.FoodImage'),
),
]

View File

@ -0,0 +1,25 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.11.7 on 2018-01-13 00:21
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('food', '0005_auto_20180113_0023'),
]
operations = [
migrations.AlterField(
model_name='foodimage',
name='image',
field=models.ImageField(blank=True, null=True, upload_to='food/originals/%Y/%m/%W'),
),
migrations.AlterField(
model_name='foodimage',
name='thumb',
field=models.ImageField(blank=True, null=True, upload_to='food/thumbs/%Y/%m/%W'),
),
]

View File

@ -10,16 +10,22 @@ from django.contrib.auth.models import User
from django.core.files.uploadedfile import SimpleUploadedFile
from django.db import models
from django.utils import timezone
from django.utils.encoding import smart_text
MAX_LENGTH = 256
# Create your models here.
class Menu(models.Model):
ERBA = 'ERBA'
MARKUSPLATZ = 'MARKUSPLATZ'
FEKI = 'FEKI'
AUSTRASSE = 'AUSTRASSE'
LOCATION_CHOICES = (
(ERBA, 'Erba'), (MARKUSPLATZ, 'Markusplatz'), (FEKI, 'Feldkirchenstrasse'), (AUSTRASSE, 'Austrasse'))
id = models.AutoField(primary_key=True)
date = models.DateField(default=timezone.now)
location = models.CharField(max_length=MAX_LENGTH)
location = models.CharField(max_length=MAX_LENGTH, choices=LOCATION_CHOICES)
menu = models.ManyToManyField("SingleFood", related_name="foods")
class Meta:
@ -35,7 +41,7 @@ class SingleFood(models.Model):
price_student = models.CharField(max_length=10, blank=True, null=True)
price_employee = models.CharField(max_length=10, blank=True, null=True)
price_guest = models.CharField(max_length=10, blank=True, null=True)
image = models.ManyToManyField("UserFoodImage", blank=True, null=True)
image = models.ForeignKey('FoodImage', on_delete=models.PROTECT, blank=True, null=True)
rating = models.FloatField(default=0)
allergens = models.ManyToManyField("Allergene", blank=True)
@ -81,8 +87,7 @@ class UserFoodImage(models.Model):
id = models.AutoField(primary_key=True)
user = models.ForeignKey(User, on_delete=models.PROTECT, unique=False)
food = models.ForeignKey(SingleFood, on_delete=models.PROTECT)
image = models.ImageField(upload_to='food/originals/%Y/%m/%W', blank=True)
thumb = models.ImageField(upload_to='food/thumbs/%Y/%m/%W', blank=True)
image = models.ForeignKey('FoodImage', on_delete=models.PROTECT)
class Meta:
unique_together = ('user', 'food')
@ -90,6 +95,12 @@ class UserFoodImage(models.Model):
def __str__(self):
return "User: %s - Image: %s" % (self.user.username, str(self.image))
class FoodImage(models.Model):
id = models.AutoField(primary_key=True)
image = models.ImageField(upload_to='food/originals/%Y/%m/%W', blank=True, null=True)
thumb = models.ImageField(upload_to='food/thumbs/%Y/%m/%W', blank=True, null=True)
def save(self, force_update=False, force_insert=False, thumb_size=(640, 480)):
image = Image.open(self.image)
@ -106,13 +117,13 @@ class UserFoodImage(models.Model):
suf = SimpleUploadedFile(os.path.split(self.image.name)[-1],
temp_handle.read(),
content_type='image/jpg')
str_food = smart_text(self.food.name, encoding='utf-8')
self.thumb.save('%s_%s_thumbnail.%s' % (str_food, self.user.username, 'jpg'), suf, save=False)
self.thumb.save('%s_thumbnail.%s' % (self.id, 'jpg'), suf, save=False)
# save the image object
self.image.name = "%s_%s_original.%s" % (str_food, self.user.username, 'jpg')
super(UserFoodImage, self).save(force_update, force_insert)
self.image.name = "%s_original.%s" % (self.id, 'jpg')
super(FoodImage, self).save(force_update, force_insert)
def delete(self, using=None, keep_parents=False):
os.remove(os.path.join(settings.MEDIA_ROOT, self.image.name))
os.remove(os.path.join(settings.MEDIA_ROOT, self.thumb.name))
super(UserFoodImage, self).delete()
super(FoodImage, self).delete()

View File

@ -12,12 +12,23 @@ LINK_ERBA_CAFETE = "https://www.studentenwerk-wuerzburg.de/bamberg/essen-trinken
LINK_MARKUS_CAFETE = "https://www.studentenwerk-wuerzburg.de/bamberg/essen-trinken/sonderspeiseplaene/cafeteria-markusplatz.html"
LINK_FEKIDE_GUIDE = "https://www.feki.de/happyhour"
LOCATION_NAMES = ('erba', 'markusplatz', 'feldkirchenstraße', 'austraße')
def getJsonFromFile(path):
with open(path, "r") as file:
return json.load(file)
def getLocation(raw_loc):
for choice, name in zip(Menu.LOCATION_CHOICES, LOCATION_NAMES):
print(name.upper() in str(raw_loc).upper())
if (name.upper() in str(raw_loc).upper()):
return choice
print("LOCATION NOT FOUND")
def writeStudentenwerkDataInDB(data):
data = json.loads(data)
pprint(data)
@ -69,8 +80,9 @@ def writeStudentenwerkDataInDB(data):
db_single_food.allergens = allergens
foodlist.append(db_single_food)
try:
date = datetime.strptime(str(menu['date']), "%d.%m.").replace(year=datetime.today().year)
menu = Menu.objects.create(location=data['name'], date=date)
menu = Menu.objects.create(location=getLocation(data['name']), date=date)
menu.menu.set(foodlist)
menu.save()
except IntegrityError as error:

View File

@ -2,34 +2,31 @@
from __future__ import unicode_literals
import datetime
import os
from django.core.exceptions import ObjectDoesNotExist
from django.http import HttpResponse
from django.shortcuts import render
from pprint import pprint
from apps.food.forms import UploadImageForm
from apps.food.models import Menu, HappyHour, SingleFood, UserRating, UserFoodImage
from apps.food.models import Menu, HappyHour, SingleFood, UserRating, UserFoodImage, FoodImage
# Create your views here.
def daily_food(request):
today = datetime.datetime.now()
start_week = today - datetime.timedelta(today.weekday())
end_week = start_week + datetime.timedelta(20)
end_week = start_week + datetime.timedelta(7)
feki_menu = Menu.objects.filter(date__exact=today).filter(location__contains="Feldkirchenstraße").last()
austr_menu = Menu.objects.filter(date__exact=today).filter(location__contains="Austraße").last()
erba_cafete = Menu.objects.filter(date__exact=today).filter(location__contains="Erba").last()
markus_cafete = Menu.objects.filter(date__exact=today).filter(location__contains="markus").last()
feki_menu = Menu.objects.filter(date__exact=today).filter(location__contains=Menu.FEKI).last()
austr_menu = Menu.objects.filter(date__exact=today).filter(location__contains=Menu.AUSTRASSE).last()
erba_cafete = Menu.objects.filter(date__exact=today).filter(location__contains=Menu.ERBA).last()
markus_cafete = Menu.objects.filter(date__exact=today).filter(location__contains=Menu.MARKUSPLATZ).last()
happy_hours = HappyHour.objects.filter(date__exact=today)
weekly_menus = Menu.objects.filter(date__gte=start_week, date__lte=end_week)
weekly_feki_menu = weekly_menus.filter(location__contains="Feldkirchenstraße")
weekly_austr_menu = weekly_menus.filter(location__contains="Austraße")
weekly_erba_cafete = weekly_menus.filter(location__contains="Erba")
weekly_markus_cafete = weekly_menus.filter(location__contains="markus")
weekly_feki_menu = weekly_menus.filter(location__contains=Menu.FEKI)
weekly_austr_menu = weekly_menus.filter(location__contains=Menu.AUSTRASSE)
weekly_erba_cafete = weekly_menus.filter(location__contains=Menu.ERBA)
weekly_markus_cafete = weekly_menus.filter(location__contains=Menu.MARKUSPLATZ)
return render(request, "food/daily_food.jinja", {
'day': today,
@ -134,15 +131,10 @@ def food_image(request):
def pic_upload(request, id):
form = UploadImageForm(request.POST, request.FILES)
if form.is_valid():
try:
old_user_pic = UserFoodImage.objects.get(user=request.user, food=id)
old_user_pic.delete()
except ObjectDoesNotExist:
pass
userPic = form.save(commit=False)
pic = form.save(commit=True)
userPic, success = UserFoodImage.objects.get_or_create(user_id=request.user)
userPic.image = pic
userPic.food = SingleFood.objects.get(id=id)
userPic.user = request.user
userPic.save()
return True
else:

View File

@ -11,7 +11,7 @@
<div class="col-6">
<a href="{{ url('foodpicture-save', kwargs={'id':picture.id}) }}">
<h3>{{ picture.food.name }}</h3>
<img src="{{ picture.image.url }}" style="width: 50%">
<img src="{{ picture.image.image.url }}" style="width: 50%">
</a>
</div>
{% endfor %}

View File

@ -46,7 +46,7 @@
{% for image in images %}
<div class="col-12 mt-2">
<p>{{ image.food.name }}</p>
<img src="{{ image.image.url }}" style="width:50%">
<img src="{{ image.image.image.url }}" style="width:50%">
</div>
{% endfor %}
</div>

View File

@ -60,13 +60,11 @@
<li data-food="{{ single_food.id }}" data-rating="{{ single_food.rating }}" class="food-item media mb-2">
<div class="mr-2 media-left media-middle">
{# TODO: without many to many #}
{% if single_food.image.all() %}
{% for image in single_food.image.all() %}
<a href="{{ image.image.url }}" data-lightbox="{{ title }}"
data-title="{{ single_food.name }}">
<img src="{{ image.image.url }}" class="media-object" alt="Bild" width="80px">
</a>
{% endfor %}
{% if single_food.image %}
<a href="{{ single_food.image.image.url }}" data-lightbox="{{ title }}"
data-title="{{ single_food.name }}">
<img src="{{ single_food.image.image.url }}" class="media-object" alt="Bild" width="80px">
</a>
{% else %}
<a href="/media/food/default/default.jpg" data-lightbox="{{ title }}"
data-title="{{ single_food.name }}">