added user rating

This commit is contained in:
Götz 2017-10-30 00:23:32 +01:00
parent 249517a58b
commit b23062965c
8 changed files with 157 additions and 29 deletions

View File

@ -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)

View File

@ -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)),
],
),
]

View File

@ -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),
),
]

View File

@ -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),
),
]

View File

@ -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',
),
]

View File

@ -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)

View File

@ -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):

View File

@ -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('<i class="star-' + (i + 1) + '-' + food + ' fa fa-star-o star" aria-hidden="true"></i>');
}
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('<p class="rating-error">Please Log in to use the Rating function</p>');
setTimeout(function () {
$('.rating-error').remove();
}, 1500);
}