diff --git a/apps/establishment/migrations/0091_auto_20200130_1905.py b/apps/establishment/migrations/0091_auto_20200130_1905.py new file mode 100644 index 00000000..cb1ce5ba --- /dev/null +++ b/apps/establishment/migrations/0091_auto_20200130_1905.py @@ -0,0 +1,35 @@ +# Generated by Django 2.2.7 on 2020-01-30 19:05 + +import django.contrib.postgres.fields +from django.db import migrations, models +import utils.models + + +class Migration(migrations.Migration): + + dependencies = [ + ('establishment', '0090_auto_20200130_1849'), + ] + + operations = [ + migrations.AddField( + model_name='menu', + name='diner', + field=django.contrib.postgres.fields.ArrayField(base_field=models.BooleanField(default=False), default=utils.models.default_menu_bool_array, size=7), + ), + migrations.AddField( + model_name='menu', + name='last_update', + field=models.DateField(auto_now=True, verbose_name='Date updated'), + ), + migrations.AddField( + model_name='menu', + name='lunch', + field=django.contrib.postgres.fields.ArrayField(base_field=models.BooleanField(default=False), default=utils.models.default_menu_bool_array, size=7), + ), + migrations.AddField( + model_name='menu', + name='price', + field=models.DecimalField(decimal_places=2, default=0, max_digits=14, verbose_name='price'), + ), + ] diff --git a/apps/establishment/models.py b/apps/establishment/models.py index e02b3291..a7097744 100644 --- a/apps/establishment/models.py +++ b/apps/establishment/models.py @@ -31,7 +31,7 @@ from timetable.models import Timetable from utils.methods import transform_into_readable_str from utils.models import ( BaseAttributes, FavoritesMixin, FileMixin, GalleryMixin, HasTagsMixin, IntermediateGalleryModelMixin, - ProjectBaseMixin, TJSONField, TranslatedFieldsMixin, TypeDefaultImageMixin, URLImageMixin, + ProjectBaseMixin, TJSONField, TranslatedFieldsMixin, TypeDefaultImageMixin, URLImageMixin, default_menu_bool_array ) @@ -1266,6 +1266,10 @@ class Plate(TranslatedFieldsMixin, models.Model): class MenuQuerySet(models.QuerySet): + + def with_base_related(self): + return self.prefetch_related('establishment', 'uploads') + def with_schedule_plates_establishment(self): return self.select_related( 'establishment', @@ -1309,6 +1313,14 @@ class Menu(GalleryMixin, TranslatedFieldsMixin, BaseAttributes): verbose_name=_('Establishment schedule'), related_name='menus', ) + lunch = ArrayField(models.BooleanField( + default=False, + ), size=7, default=default_menu_bool_array) + diner = ArrayField(models.BooleanField( + default=False, + ), size=7, default=default_menu_bool_array) + last_update = models.DateField(auto_now=True, verbose_name=_('Date updated')) + price = models.DecimalField(_('price'), max_digits=14, decimal_places=2, default=0) old_id = models.PositiveIntegerField(_('old id'), blank=True, null=True, default=None) uploads = models.ManyToManyField( diff --git a/apps/establishment/serializers/back.py b/apps/establishment/serializers/back.py index f6b1715d..6d5e34a8 100644 --- a/apps/establishment/serializers/back.py +++ b/apps/establishment/serializers/back.py @@ -1,17 +1,15 @@ from functools import lru_cache -from django.db.models import F -from django.shortcuts import get_object_or_404 -from django.utils.translation import gettext_lazy as _ -from rest_framework import serializers - from account.serializers.common import UserShortSerializer +from django.db.models import F +from django.utils.translation import gettext_lazy as _ from establishment import models, serializers as model_serializers from establishment.models import ContactEmail, ContactPhone, EstablishmentEmployee from gallery.models import Image from location.serializers import AddressDetailSerializer, TranslatedField from main.models import Currency from main.serializers import AwardSerializer +from rest_framework import serializers from utils.decorators import with_base_attributes from utils.serializers import ImageBaseSerializer, ProjectModelSerializer, TimeZoneChoiceField @@ -719,3 +717,27 @@ class MenuFilesSerializers(ProjectModelSerializer): instance = models.MenuFiles.objects.create(**validated_data) menu.uploads.add(instance) return instance + + +class MenuBackOfficeSerializer(serializers.ModelSerializer): + name = serializers.CharField(read_only=True, source='category_translated') + drinks_included = serializers.BooleanField(source='is_drinks_included') + establishment_id = serializers.IntegerField(source='establishment.id') + establishment_slug = serializers.CharField(source='establishment.slug') + + class Meta: + model = models.Menu + fields = [ + 'id', + 'name', + 'establishment_id', + 'establishment_slug', + 'price', + 'drinks_included', + 'diner', + 'lunch', + 'last_update', + ] + extra_kwargs = { + 'last_update': {'read_only': True} + } diff --git a/apps/establishment/views/back.py b/apps/establishment/views/back.py index 39a7a54a..a41eef71 100644 --- a/apps/establishment/views/back.py +++ b/apps/establishment/views/back.py @@ -157,12 +157,15 @@ class EstablishmentScheduleCreateView(generics.CreateAPIView): class MenuListCreateView(generics.ListCreateAPIView): """Menu list create view.""" - serializer_class = serializers.MenuSerializers - queryset = models.Menu.objects.all() - permission_classes = get_permission_classes( - IsEstablishmentManager, - IsEstablishmentAdministrator, - ) + serializer_class = serializers.MenuBackOfficeSerializer + queryset = models.Menu.objects.with_base_related() + # permission_classes = get_permission_classes( + # IsEstablishmentManager, + # IsEstablishmentAdministrator, + # ) + from rest_framework.permissions import AllowAny + permission_classes = (AllowAny, ) + filter_backends = (DjangoFilterBackend,) filterset_fields = ( 'establishment', diff --git a/apps/utils/models.py b/apps/utils/models.py index 281c57ca..a3892554 100644 --- a/apps/utils/models.py +++ b/apps/utils/models.py @@ -507,3 +507,7 @@ class TypeDefaultImageMixin: def preview_image_url(self): if hasattr(self, 'default_image') and self.default_image: return self.default_image.get_image_url(thumbnail_key='type_preview') + + +def default_menu_bool_array(): + return [False] * 7