Added menus method
This commit is contained in:
parent
e067e8e793
commit
bcc5f2da51
69
apps/establishment/migrations/0084_auto_20200129_1113.py
Normal file
69
apps/establishment/migrations/0084_auto_20200129_1113.py
Normal file
|
|
@ -0,0 +1,69 @@
|
||||||
|
# Generated by Django 2.2.7 on 2020-01-29 11:13
|
||||||
|
|
||||||
|
from django.conf import settings
|
||||||
|
import django.core.validators
|
||||||
|
from django.db import migrations, models
|
||||||
|
import django.db.models.deletion
|
||||||
|
import django.utils.timezone
|
||||||
|
import utils.methods
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
|
||||||
|
('establishment', '0083_establishment_instagram'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.CreateModel(
|
||||||
|
name='MenuFiles',
|
||||||
|
fields=[
|
||||||
|
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||||
|
('created', models.DateTimeField(default=django.utils.timezone.now, editable=False, verbose_name='Date created')),
|
||||||
|
('modified', models.DateTimeField(auto_now=True, verbose_name='Date updated')),
|
||||||
|
('file', models.FileField(blank=True, default=None, null=True, upload_to=utils.methods.file_path, validators=[django.core.validators.FileExtensionValidator(allowed_extensions=('jpg', 'jpeg', 'png', 'doc', 'docx', 'pdf'))], verbose_name='File')),
|
||||||
|
('name', models.CharField(default='', max_length=255, verbose_name='name')),
|
||||||
|
('type', models.CharField(default='', max_length=65, verbose_name='type')),
|
||||||
|
('created_by', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='menufiles_records_created', to=settings.AUTH_USER_MODEL, verbose_name='created by')),
|
||||||
|
('modified_by', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='menufiles_records_modified', to=settings.AUTH_USER_MODEL, verbose_name='modified by')),
|
||||||
|
],
|
||||||
|
options={
|
||||||
|
'verbose_name': 'menu upload',
|
||||||
|
'verbose_name_plural': 'menu uploads',
|
||||||
|
},
|
||||||
|
),
|
||||||
|
migrations.RemoveField(
|
||||||
|
model_name='menuuploads',
|
||||||
|
name='created_by',
|
||||||
|
),
|
||||||
|
migrations.RemoveField(
|
||||||
|
model_name='menuuploads',
|
||||||
|
name='menu',
|
||||||
|
),
|
||||||
|
migrations.RemoveField(
|
||||||
|
model_name='menuuploads',
|
||||||
|
name='modified_by',
|
||||||
|
),
|
||||||
|
migrations.AddField(
|
||||||
|
model_name='menu',
|
||||||
|
name='name',
|
||||||
|
field=models.CharField(default='', max_length=255, verbose_name='name'),
|
||||||
|
),
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='menu',
|
||||||
|
name='schedule',
|
||||||
|
field=models.ManyToManyField(blank=True, to='timetable.Timetable', verbose_name='Menu schedule'),
|
||||||
|
),
|
||||||
|
migrations.DeleteModel(
|
||||||
|
name='MenuGallery',
|
||||||
|
),
|
||||||
|
migrations.DeleteModel(
|
||||||
|
name='MenuUploads',
|
||||||
|
),
|
||||||
|
migrations.AddField(
|
||||||
|
model_name='menu',
|
||||||
|
name='uploads',
|
||||||
|
field=models.ManyToManyField(blank=True, to='establishment.MenuFiles', verbose_name='Menu files'),
|
||||||
|
),
|
||||||
|
]
|
||||||
18
apps/establishment/migrations/0085_menu_price.py
Normal file
18
apps/establishment/migrations/0085_menu_price.py
Normal file
|
|
@ -0,0 +1,18 @@
|
||||||
|
# Generated by Django 2.2.7 on 2020-01-29 11:16
|
||||||
|
|
||||||
|
from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('establishment', '0084_auto_20200129_1113'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.AddField(
|
||||||
|
model_name='menu',
|
||||||
|
name='price',
|
||||||
|
field=models.IntegerField(blank=True, default=None, null=True, verbose_name='price'),
|
||||||
|
),
|
||||||
|
]
|
||||||
|
|
@ -1283,6 +1283,7 @@ class Menu(GalleryMixin, TranslatedFieldsMixin, BaseAttributes):
|
||||||
'establishment.Establishment', verbose_name=_('establishment'),
|
'establishment.Establishment', verbose_name=_('establishment'),
|
||||||
on_delete=models.CASCADE)
|
on_delete=models.CASCADE)
|
||||||
is_drinks_included = models.BooleanField(_('is drinks included'), default=False)
|
is_drinks_included = models.BooleanField(_('is drinks included'), default=False)
|
||||||
|
price = models.IntegerField(blank=True, null=True, default=None, verbose_name=_('price'))
|
||||||
schedule = models.ManyToManyField(
|
schedule = models.ManyToManyField(
|
||||||
to='timetable.Timetable',
|
to='timetable.Timetable',
|
||||||
blank=True,
|
blank=True,
|
||||||
|
|
@ -1306,9 +1307,13 @@ class Menu(GalleryMixin, TranslatedFieldsMixin, BaseAttributes):
|
||||||
|
|
||||||
class MenuFiles(FileMixin, BaseAttributes):
|
class MenuFiles(FileMixin, BaseAttributes):
|
||||||
"""Menu files"""
|
"""Menu files"""
|
||||||
|
TYPES = (
|
||||||
|
('image', 'Image'),
|
||||||
|
('file', 'File')
|
||||||
|
)
|
||||||
|
|
||||||
name = models.CharField(_('name'), max_length=255, default='')
|
name = models.CharField(_('name'), max_length=255, default='')
|
||||||
type = models.CharField(_('type'), max_length=65, default='')
|
type = models.CharField(_('type'), choices=TYPES, max_length=65, default='')
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
verbose_name = _('menu upload')
|
verbose_name = _('menu upload')
|
||||||
|
|
|
||||||
|
|
@ -2,6 +2,7 @@
|
||||||
import logging
|
import logging
|
||||||
|
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
|
from django.shortcuts import get_object_or_404
|
||||||
from django.utils.translation import ugettext_lazy as _
|
from django.utils.translation import ugettext_lazy as _
|
||||||
from phonenumber_field.phonenumber import to_python as str_to_phonenumber
|
from phonenumber_field.phonenumber import to_python as str_to_phonenumber
|
||||||
from rest_framework import serializers
|
from rest_framework import serializers
|
||||||
|
|
@ -9,24 +10,18 @@ from rest_framework import serializers
|
||||||
from comment import models as comment_models
|
from comment import models as comment_models
|
||||||
from comment.serializers import common as comment_serializers
|
from comment.serializers import common as comment_serializers
|
||||||
from establishment import models
|
from establishment import models
|
||||||
from establishment.models import Establishment
|
|
||||||
from location.serializers import (
|
from location.serializers import (
|
||||||
AddressBaseSerializer, CityBaseSerializer, AddressDetailSerializer,
|
AddressBaseSerializer, AddressDetailSerializer, CityBaseSerializer,
|
||||||
CityShortSerializer,
|
CityShortSerializer, EstablishmentWineOriginBaseSerializer, EstablishmentWineRegionBaseSerializer,
|
||||||
)
|
|
||||||
from location.serializers import (
|
|
||||||
EstablishmentWineRegionBaseSerializer,
|
|
||||||
EstablishmentWineOriginBaseSerializer,
|
|
||||||
)
|
)
|
||||||
from main.serializers import AwardSerializer, CurrencySerializer
|
from main.serializers import AwardSerializer, CurrencySerializer
|
||||||
from review.serializers import ReviewShortSerializer
|
from review.serializers import ReviewShortSerializer
|
||||||
from tag.serializers import TagBaseSerializer
|
from tag.serializers import TagBaseSerializer
|
||||||
from timetable.serialziers import ScheduleRUDSerializer
|
from timetable.serialziers import ScheduleRUDSerializer
|
||||||
from utils import exceptions as utils_exceptions
|
from utils import exceptions as utils_exceptions
|
||||||
from utils.serializers import ImageBaseSerializer, CarouselCreateSerializer
|
|
||||||
from utils.serializers import (
|
from utils.serializers import (
|
||||||
|
CarouselCreateSerializer, FavoritesCreateSerializer, ImageBaseSerializer,
|
||||||
ProjectModelSerializer, TranslatedField,
|
ProjectModelSerializer, TranslatedField,
|
||||||
FavoritesCreateSerializer,
|
|
||||||
)
|
)
|
||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
|
|
@ -77,22 +72,41 @@ class PlateSerializer(ProjectModelSerializer):
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
|
class MenuFilesSerializers(ProjectModelSerializer):
|
||||||
|
menu_id = serializers.IntegerField(write_only=True)
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
model = models.MenuFiles
|
||||||
|
fields = [
|
||||||
|
'id',
|
||||||
|
'name',
|
||||||
|
'type',
|
||||||
|
'file',
|
||||||
|
'menu_id'
|
||||||
|
]
|
||||||
|
|
||||||
|
def create(self, validated_data):
|
||||||
|
menu_id = validated_data.pop('menu_id')
|
||||||
|
menu = get_object_or_404(models.Menu, pk=menu_id)
|
||||||
|
instance = models.MenuFiles.objects.create(**validated_data)
|
||||||
|
menu.uploads.add(instance)
|
||||||
|
return instance
|
||||||
|
|
||||||
|
|
||||||
class MenuSerializers(ProjectModelSerializer):
|
class MenuSerializers(ProjectModelSerializer):
|
||||||
name = serializers.CharField()
|
name = serializers.CharField()
|
||||||
establishment_id = serializers.PrimaryKeyRelatedField(queryset=models.Establishment.objects.all())
|
establishment_id = serializers.PrimaryKeyRelatedField(queryset=models.Establishment.objects.all())
|
||||||
establishment_slug = serializers.CharField(read_only=True, source='establishment.slug')
|
establishment_slug = serializers.CharField(read_only=True, source='establishment.slug')
|
||||||
price = serializers.IntegerField(read_only=True, source='establishment.price_level', required=False)
|
price = serializers.IntegerField(required=False)
|
||||||
drinks_included = serializers.BooleanField(source='is_drinks_included', required=FavoritesCreateSerializer)
|
drinks_included = serializers.BooleanField(source='is_drinks_included', required=False)
|
||||||
schedules = ScheduleRUDSerializer(many=True, allow_null=True, required=False)
|
schedules = ScheduleRUDSerializer(many=True, allow_null=True, required=False)
|
||||||
uploads = serializers.FileField(allow_null=True, required=False)
|
uploads = MenuFilesSerializers(many=True, read_only=True)
|
||||||
category_translated = serializers.CharField(read_only=True)
|
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = models.Menu
|
model = models.Menu
|
||||||
fields = [
|
fields = [
|
||||||
'id',
|
'id',
|
||||||
'name',
|
'name',
|
||||||
'establishment',
|
|
||||||
'establishment_id',
|
'establishment_id',
|
||||||
'establishment_slug',
|
'establishment_slug',
|
||||||
'price',
|
'price',
|
||||||
|
|
@ -100,39 +114,35 @@ class MenuSerializers(ProjectModelSerializer):
|
||||||
'schedules',
|
'schedules',
|
||||||
'uploads',
|
'uploads',
|
||||||
'category',
|
'category',
|
||||||
'category_translated',
|
|
||||||
]
|
]
|
||||||
|
|
||||||
def create(self, validated_data):
|
def create(self, validated_data):
|
||||||
print(validated_data, '\n\n\n\n\n')
|
validated_data['establishment'] = validated_data.pop('establishment_id')
|
||||||
establishment = models.Establishment.objects.get(pk=validated_data.pop('establishment'))
|
|
||||||
validated_data['establishment'] = establishment['id']
|
|
||||||
instance = models.Menu.objects.create(**validated_data)
|
instance = models.Menu.objects.create(**validated_data)
|
||||||
return instance
|
return instance
|
||||||
|
|
||||||
'''
|
|
||||||
{
|
|
||||||
"name": "Menu test",
|
|
||||||
"establishment_id": 1,
|
|
||||||
"price": 1,
|
|
||||||
"drinks_included": true,
|
|
||||||
"schedules": [],
|
|
||||||
"uploads": null,
|
|
||||||
"category": null
|
|
||||||
}
|
|
||||||
'''
|
|
||||||
|
|
||||||
|
|
||||||
class MenuRUDSerializers(ProjectModelSerializer):
|
class MenuRUDSerializers(ProjectModelSerializer):
|
||||||
plates = PlateSerializer(read_only=True, many=True, source='plate_set')
|
name = serializers.CharField()
|
||||||
|
establishment_id = serializers.PrimaryKeyRelatedField(read_only=True)
|
||||||
|
establishment_slug = serializers.CharField(read_only=True, source='establishment.slug')
|
||||||
|
price = serializers.IntegerField(required=False)
|
||||||
|
drinks_included = serializers.BooleanField(source='is_drinks_included', required=False)
|
||||||
|
schedules = ScheduleRUDSerializer(many=True, allow_null=True, required=False)
|
||||||
|
uploads = MenuFilesSerializers(many=True)
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = models.Menu
|
model = models.Menu
|
||||||
fields = [
|
fields = [
|
||||||
'id',
|
'id',
|
||||||
|
'name',
|
||||||
|
'establishment_id',
|
||||||
|
'establishment_slug',
|
||||||
|
'price',
|
||||||
|
'drinks_included',
|
||||||
|
'schedules',
|
||||||
|
'uploads',
|
||||||
'category',
|
'category',
|
||||||
'plates',
|
|
||||||
'establishment'
|
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -566,7 +576,7 @@ class EstablishmentCommentBaseSerializer(comment_serializers.CommentBaseSerializ
|
||||||
'created',
|
'created',
|
||||||
'text',
|
'text',
|
||||||
'mark',
|
'mark',
|
||||||
'nickname',
|
# 'nickname',
|
||||||
'profile_pic',
|
'profile_pic',
|
||||||
'status',
|
'status',
|
||||||
'status_display',
|
'status_display',
|
||||||
|
|
@ -606,7 +616,7 @@ class EstablishmentCommentRUDSerializer(comment_serializers.CommentBaseSerialize
|
||||||
'created',
|
'created',
|
||||||
'text',
|
'text',
|
||||||
'mark',
|
'mark',
|
||||||
'nickname',
|
# 'nickname',
|
||||||
'profile_pic',
|
'profile_pic',
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -37,6 +37,8 @@ urlpatterns = [
|
||||||
# name='menu-dishes-gallery-create-destroy'),
|
# name='menu-dishes-gallery-create-destroy'),
|
||||||
path('menus/', views.MenuListCreateView.as_view(), name='menu-list'),
|
path('menus/', views.MenuListCreateView.as_view(), name='menu-list'),
|
||||||
path('menus/<int:pk>/', views.MenuRUDView.as_view(), name='menu-rud'),
|
path('menus/<int:pk>/', views.MenuRUDView.as_view(), name='menu-rud'),
|
||||||
|
path('menus/uploads/', views.MenuFilesListCreateView.as_view(), name='menu-files-list'),
|
||||||
|
path('menus/uploads/<int:pk>/', views.MenuFilesRUDView.as_view(), name='menu-files-rud'),
|
||||||
path('plates/', views.PlateListCreateView.as_view(), name='plates'),
|
path('plates/', views.PlateListCreateView.as_view(), name='plates'),
|
||||||
path('plates/<int:pk>/', views.PlateRUDView.as_view(), name='plate-rud'),
|
path('plates/<int:pk>/', views.PlateRUDView.as_view(), name='plate-rud'),
|
||||||
path('social_choice/', views.SocialChoiceListCreateView.as_view(), name='socials_choice'),
|
path('social_choice/', views.SocialChoiceListCreateView.as_view(), name='socials_choice'),
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,7 @@
|
||||||
|
|
||||||
from django.shortcuts import get_object_or_404
|
from django.shortcuts import get_object_or_404
|
||||||
from django_filters.rest_framework import DjangoFilterBackend
|
from django_filters.rest_framework import DjangoFilterBackend
|
||||||
from rest_framework import generics, permissions, response
|
from rest_framework import generics, permissions
|
||||||
from rest_framework.response import Response
|
from rest_framework.response import Response
|
||||||
|
|
||||||
from account.models import User
|
from account.models import User
|
||||||
|
|
@ -136,6 +136,20 @@ class MenuRUDView(generics.RetrieveUpdateDestroyAPIView):
|
||||||
permission_classes = [IsWineryReviewer | IsEstablishmentManager]
|
permission_classes = [IsWineryReviewer | IsEstablishmentManager]
|
||||||
|
|
||||||
|
|
||||||
|
class MenuFilesListCreateView(generics.ListCreateAPIView):
|
||||||
|
"""Menu files list create view."""
|
||||||
|
serializer_class = serializers.MenuFilesSerializers
|
||||||
|
queryset = models.MenuFiles.objects.all()
|
||||||
|
permission_classes = [IsWineryReviewer | IsEstablishmentManager]
|
||||||
|
|
||||||
|
|
||||||
|
class MenuFilesRUDView(generics.RetrieveDestroyAPIView):
|
||||||
|
"""Menu files RUD view."""
|
||||||
|
serializer_class = serializers.MenuFilesSerializers
|
||||||
|
queryset = models.MenuFiles.objects.all()
|
||||||
|
permission_classes = [IsWineryReviewer | IsEstablishmentManager]
|
||||||
|
|
||||||
|
|
||||||
class SocialChoiceListCreateView(generics.ListCreateAPIView):
|
class SocialChoiceListCreateView(generics.ListCreateAPIView):
|
||||||
"""SocialChoice list create view."""
|
"""SocialChoice list create view."""
|
||||||
serializer_class = serializers.SocialChoiceSerializers
|
serializer_class = serializers.SocialChoiceSerializers
|
||||||
|
|
@ -466,7 +480,6 @@ class MenuDishesRUDView(generics.RetrieveUpdateDestroyAPIView):
|
||||||
queryset = models.Menu.objects.dishes().distinct()
|
queryset = models.Menu.objects.dishes().distinct()
|
||||||
permission_classes = [IsWineryReviewer | IsEstablishmentManager]
|
permission_classes = [IsWineryReviewer | IsEstablishmentManager]
|
||||||
|
|
||||||
|
|
||||||
# class MenuGalleryListView(generics.ListAPIView):
|
# class MenuGalleryListView(generics.ListAPIView):
|
||||||
# """Resource for returning gallery for menu for back-office users."""
|
# """Resource for returning gallery for menu for back-office users."""
|
||||||
# serializer_class = serializers.ImageBaseSerializer
|
# serializer_class = serializers.ImageBaseSerializer
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user