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 fddd82d5..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 ) @@ -1268,7 +1268,7 @@ class Plate(TranslatedFieldsMixin, models.Model): class MenuQuerySet(models.QuerySet): def with_base_related(self): - return self.prefetch_related('establishment') + return self.prefetch_related('establishment', 'uploads') def with_schedule_plates_establishment(self): return self.select_related( @@ -1315,10 +1315,12 @@ class Menu(GalleryMixin, TranslatedFieldsMixin, BaseAttributes): ) lunch = ArrayField(models.BooleanField( default=False, - ), size=7) + ), size=7, default=default_menu_bool_array) diner = ArrayField(models.BooleanField( default=False, - ), size=7) + ), 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 668b4181..ecf57fe4 100644 --- a/apps/establishment/serializers/back.py +++ b/apps/establishment/serializers/back.py @@ -696,3 +696,27 @@ class MenuGallerySerializer(serializers.ModelSerializer): attrs['image'] = image return attrs + + +class MenuBackOfficeSerializer(serializers.ModelSerializer): + name = serializers.CharField(read_only=True, source='category_translated') + drinks_included = serializers.BooleanField(source='is_drinks_included') + + class Meta: + model = models.Menu + fields = [ + 'id', + 'name', + 'establishment_id', + 'establishment_slug', + 'price', + 'drinks_included', + 'dinner', + 'lunch', + 'last_update', + ] + extra_kwargs = { + 'establishment_id': {'read_only': True, 'source': 'establishment.id'}, + 'establishment_slug': {'read_only': True, 'source': 'establishment.slug'}, + 'last_update': {'read_only': True} + } diff --git a/apps/establishment/views/back.py b/apps/establishment/views/back.py index 49b2349d..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 + serializer_class = serializers.MenuBackOfficeSerializer queryset = models.Menu.objects.with_base_related() - permission_classes = get_permission_classes( - IsEstablishmentManager, - IsEstablishmentAdministrator, - ) + # 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