diff --git a/ofu_app/apps/food/admin.py b/ofu_app/apps/food/admin.py index dc617cc..6d288c6 100644 --- a/ofu_app/apps/food/admin.py +++ b/ofu_app/apps/food/admin.py @@ -2,10 +2,11 @@ from __future__ import unicode_literals from django.contrib import admin -from apps.food.models import SingleFood, Menu, HappyHour +from apps.food.models import SingleFood, Menu, HappyHour, UserRating # Register your models here. admin.site.register(SingleFood) admin.site.register(Menu) admin.site.register(HappyHour) +admin.site.register(UserRating) diff --git a/ofu_app/apps/food/migrations/0002_userrating.py b/ofu_app/apps/food/migrations/0002_userrating.py new file mode 100644 index 0000000..fbbcb8b --- /dev/null +++ b/ofu_app/apps/food/migrations/0002_userrating.py @@ -0,0 +1,27 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.2 on 2017-10-29 22:35 +from __future__ import unicode_literals + +from django.conf import settings +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ('food', '0001_initial'), + ] + + operations = [ + migrations.CreateModel( + name='UserRating', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('rating', models.FloatField(default=0)), + ('food', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, to='food.SingleFood')), + ('user', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)), + ], + ), + ] diff --git a/ofu_app/apps/food/migrations/0003_auto_20171029_2341.py b/ofu_app/apps/food/migrations/0003_auto_20171029_2341.py new file mode 100644 index 0000000..df68184 --- /dev/null +++ b/ofu_app/apps/food/migrations/0003_auto_20171029_2341.py @@ -0,0 +1,20 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.2 on 2017-10-29 22:41 +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('food', '0002_userrating'), + ] + + operations = [ + migrations.AlterField( + model_name='userrating', + name='id', + field=models.AutoField(primary_key=True, serialize=False), + ), + ] diff --git a/ofu_app/apps/food/migrations/0004_auto_20171029_2343.py b/ofu_app/apps/food/migrations/0004_auto_20171029_2343.py new file mode 100644 index 0000000..aefc334 --- /dev/null +++ b/ofu_app/apps/food/migrations/0004_auto_20171029_2343.py @@ -0,0 +1,27 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.2 on 2017-10-29 22:43 +from __future__ import unicode_literals + +from django.conf import settings +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('food', '0003_auto_20171029_2341'), + ] + + operations = [ + migrations.AlterField( + model_name='userrating', + name='food', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='food.SingleFood'), + ), + migrations.AlterField( + model_name='userrating', + name='user', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL), + ), + ] diff --git a/ofu_app/apps/food/migrations/0005_auto_20171030_0023.py b/ofu_app/apps/food/migrations/0005_auto_20171030_0023.py new file mode 100644 index 0000000..8f0409b --- /dev/null +++ b/ofu_app/apps/food/migrations/0005_auto_20171030_0023.py @@ -0,0 +1,35 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.2 on 2017-10-29 23:23 +from __future__ import unicode_literals + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('food', '0004_auto_20171029_2343'), + ] + + operations = [ + migrations.RemoveField( + model_name='singlefood', + name='fifth_star', + ), + migrations.RemoveField( + model_name='singlefood', + name='first_star', + ), + migrations.RemoveField( + model_name='singlefood', + name='fourth_star', + ), + migrations.RemoveField( + model_name='singlefood', + name='second_star', + ), + migrations.RemoveField( + model_name='singlefood', + name='third_star', + ), + ] diff --git a/ofu_app/apps/food/models.py b/ofu_app/apps/food/models.py index ad6e305..7e9054d 100644 --- a/ofu_app/apps/food/models.py +++ b/ofu_app/apps/food/models.py @@ -2,6 +2,7 @@ from __future__ import unicode_literals from django.utils import timezone from django.db import models +from django.contrib.auth.models import User MAX_LENGTH = 60 @@ -28,11 +29,6 @@ class SingleFood(models.Model): price_guest = models.CharField(max_length=10, blank=True, null=True) image = models.ImageField(upload_to='food/%Y/%m/', blank=True) rating = models.FloatField(default=0) - first_star = models.SmallIntegerField(default=0) - second_star = models.SmallIntegerField(default=0) - third_star = models.SmallIntegerField(default=0) - fourth_star = models.SmallIntegerField(default=0) - fifth_star = models.SmallIntegerField(default=0) allergens = models.ManyToManyField("Allergene", blank=True) def __str__(self): @@ -60,3 +56,13 @@ class HappyHour(models.Model): def __str__(self): return "Date: %s, Location: %s" % (self.date.strftime("%Y.%m.%d"), self.location) + + +class UserRating(models.Model): + id = models.AutoField(primary_key=True) + user = models.ForeignKey(User, on_delete=models.CASCADE, unique=False) + food = models.ForeignKey(SingleFood) + rating = models.FloatField(default=0) + + def __str__(self): + return "User: %s - Rating: %s" % (self.user.username, self.rating) diff --git a/ofu_app/apps/food/views.py b/ofu_app/apps/food/views.py index 95c19ad..d09073c 100644 --- a/ofu_app/apps/food/views.py +++ b/ofu_app/apps/food/views.py @@ -5,7 +5,7 @@ import datetime from django.shortcuts import render -from apps.food.models import Menu, HappyHour, SingleFood +from apps.food.models import Menu, HappyHour, SingleFood, UserRating from django.http import HttpResponse from rest_framework import viewsets, generics from rest_framework import status @@ -80,29 +80,27 @@ def food(request): def food_rating(request): - food_id = request.GET.get('food_id', None) - rating = request.GET.get('rating', None) - if food_id and rating: - print("ID: %s, RATING: %s" % (food_id, rating)) - food = SingleFood.objects.get(id=food_id) - if rating == str(1): - food.first_star = food.first_star + 1 - if rating == str(2): - food.second_star += 1 - if rating == str(3): - food.third_star += 1 - if rating == str(4): - food.fourth_star += 1 - if rating == str(5): - food.fifth_star += 1 - global_count = food.first_star + food.second_star + food.third_star + food.fourth_star + food.fifth_star - sum = food.first_star * 1 + food.second_star * 2 + food.third_star * 3 + food.fourth_star * 4 + food.fifth_star * 5 - food.rating = sum / global_count - print("SUMME: " + str(sum / global_count)) - food.save() - return HttpResponse(status=200) + if (request.user.is_authenticated): + food_id = request.GET.get('food_id', None) + rating = request.GET.get('rating', None) + if food_id and rating: + food = SingleFood.objects.get(id=food_id) + user_rating, created = UserRating.objects.get_or_create(user=request.user, + food=food) + user_rating.rating = rating + user_rating.save() - return HttpResponse(status=404) + food_user_ratings = UserRating.objects.all().filter(food=food) + sum = 0 + for food_user_rating in food_user_ratings: + sum += food_user_rating.rating + + food.rating = sum / food_user_ratings.count() + food.save() + return HttpResponse(status=200) + return HttpResponse(status=404) + + return HttpResponse(status=403) def food_image(request): diff --git a/ofu_app/static/js/food/rating.js b/ofu_app/static/js/food/rating.js index 59f23ac..9c851c5 100644 --- a/ofu_app/static/js/food/rating.js +++ b/ofu_app/static/js/food/rating.js @@ -25,6 +25,7 @@ function add_Stars() { var rating = $(this).data('rating'); console.log("ITEM: " + $(this) + " FOOD-ID: " + food + " FOOD-RATING: " + rating); for (var i = 0; i < 5; i++) { + $(this).find('.rating-wrapper').addClass('food-' + food); $(this).find('.rating-wrapper').append(''); } buildRating(food, rating); @@ -78,9 +79,22 @@ function sendRating(obj) { var xhttp = new XMLHttpRequest(); xhttp.onreadystatechange = function () { if (this.readyState == 4 && this.status == 200) { + console.log("sent"); + } + if (this.readyState == 4 && this.status == 403) { + console.log("ERROR"); + ratingError('food-' + food_id); } }; console.log(url + "?rating=" + rating + "&food_id=" + food_id); xhttp.open("GET", url + "?rating=" + rating + "&food_id=" + food_id, true); xhttp.send(); +} + +function ratingError(obj) { + console.log("Show in " + obj); + $('.' + obj).append('

Please Log in to use the Rating function

'); + setTimeout(function () { + $('.rating-error').remove(); + }, 1500); } \ No newline at end of file