add api for estab, social, plates, menu
This commit is contained in:
parent
a4d7430379
commit
efac785248
|
|
@ -0,0 +1,17 @@
|
|||
# Generated by Django 2.2.4 on 2019-09-11 12:52
|
||||
|
||||
from django.db import migrations
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('establishment', '0015_delete_comment'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.RemoveField(
|
||||
model_name='establishment',
|
||||
name='name',
|
||||
),
|
||||
]
|
||||
55
apps/establishment/migrations/0017_auto_20190911_1258.py
Normal file
55
apps/establishment/migrations/0017_auto_20190911_1258.py
Normal file
|
|
@ -0,0 +1,55 @@
|
|||
# Generated by Django 2.2.4 on 2019-09-11 12:58
|
||||
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
import utils.models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('establishment', '0016_remove_establishment_name'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='establishment',
|
||||
name='name',
|
||||
field=models.CharField(default='', max_length=255, verbose_name='name'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='establishment',
|
||||
name='address',
|
||||
field=models.ForeignKey(blank=True, default=None, null=True, on_delete=django.db.models.deletion.PROTECT, to='location.Address', verbose_name='address'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='establishment',
|
||||
name='description',
|
||||
field=utils.models.TJSONField(blank=True, default=None, help_text='{"en-GB":"some text"}', null=True, verbose_name='description'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='establishment',
|
||||
name='establishment_subtypes',
|
||||
field=models.ManyToManyField(related_name='subtype_establishment', to='establishment.EstablishmentSubType', verbose_name='subtype'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='establishment',
|
||||
name='establishment_type',
|
||||
field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, related_name='establishment', to='establishment.EstablishmentType', verbose_name='type'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='establishment',
|
||||
name='price_level',
|
||||
field=models.PositiveIntegerField(blank=True, default=None, null=True, verbose_name='price level'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='establishment',
|
||||
name='public_mark',
|
||||
field=models.PositiveIntegerField(blank=True, default=None, null=True, verbose_name='public mark'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='establishment',
|
||||
name='toque_number',
|
||||
field=models.PositiveIntegerField(blank=True, default=None, null=True, verbose_name='toque number'),
|
||||
),
|
||||
]
|
||||
27
apps/establishment/migrations/0018_socialnetwork.py
Normal file
27
apps/establishment/migrations/0018_socialnetwork.py
Normal file
|
|
@ -0,0 +1,27 @@
|
|||
# Generated by Django 2.2.4 on 2019-09-12 13:04
|
||||
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('establishment', '0017_auto_20190911_1258'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.CreateModel(
|
||||
name='SocialNetwork',
|
||||
fields=[
|
||||
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('title', models.CharField(max_length=255, verbose_name='title')),
|
||||
('url', models.URLField(verbose_name='URL')),
|
||||
('establishment', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='socials', to='establishment.Establishment', verbose_name='establishment')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': 'social network',
|
||||
'verbose_name_plural': 'social networks',
|
||||
},
|
||||
),
|
||||
]
|
||||
|
|
@ -106,32 +106,29 @@ class EstablishmentQuerySet(models.QuerySet):
|
|||
class Establishment(ProjectBaseMixin, ImageMixin, TranslatedFieldsMixin):
|
||||
"""Establishment model."""
|
||||
|
||||
STR_FIELD_NAME = 'name'
|
||||
|
||||
name = TJSONField(blank=True, null=True, default=None,
|
||||
verbose_name=_('Name'), help_text='{"en-GB":"some text"}')
|
||||
name = models.CharField(_('name'), max_length=255, default='')
|
||||
description = TJSONField(blank=True, null=True, default=None,
|
||||
verbose_name=_('Description'),
|
||||
verbose_name=_('description'),
|
||||
help_text='{"en-GB":"some text"}')
|
||||
public_mark = models.PositiveIntegerField(blank=True, null=True,
|
||||
default=None,
|
||||
verbose_name=_('Public mark'),)
|
||||
verbose_name=_('public mark'),)
|
||||
toque_number = models.PositiveIntegerField(blank=True, null=True,
|
||||
default=None,
|
||||
verbose_name=_('Toque number'),)
|
||||
verbose_name=_('toque number'),)
|
||||
establishment_type = models.ForeignKey(EstablishmentType,
|
||||
related_name='establishment',
|
||||
on_delete=models.PROTECT,
|
||||
verbose_name=_('Type'))
|
||||
verbose_name=_('type'))
|
||||
establishment_subtypes = models.ManyToManyField(EstablishmentSubType,
|
||||
related_name='subtype_establishment',
|
||||
verbose_name=_('Subtype'))
|
||||
verbose_name=_('subtype'))
|
||||
address = models.ForeignKey(Address, blank=True, null=True, default=None,
|
||||
on_delete=models.PROTECT,
|
||||
verbose_name=_('Address'))
|
||||
verbose_name=_('address'))
|
||||
price_level = models.PositiveIntegerField(blank=True, null=True,
|
||||
default=None,
|
||||
verbose_name=_('Price level'))
|
||||
verbose_name=_('price level'))
|
||||
website = models.URLField(blank=True, null=True, default=None,
|
||||
verbose_name=_('Web site URL'))
|
||||
facebook = models.URLField(blank=True, null=True, default=None,
|
||||
|
|
@ -155,6 +152,9 @@ class Establishment(ProjectBaseMixin, ImageMixin, TranslatedFieldsMixin):
|
|||
verbose_name = _('Establishment')
|
||||
verbose_name_plural = _('Establishments')
|
||||
|
||||
def __str__(self):
|
||||
return f'id:{self.id}-{self.name}'
|
||||
|
||||
# todo: recalculate toque_number
|
||||
def recalculate_toque_number(self):
|
||||
self.toque_number = 4
|
||||
|
|
@ -326,6 +326,7 @@ class ContactEmail(models.Model):
|
|||
|
||||
class Plate(TranslatedFieldsMixin, models.Model):
|
||||
"""Plate model."""
|
||||
STR_FIELD_NAME = 'name'
|
||||
|
||||
name = TJSONField(
|
||||
blank=True, null=True, default=None, verbose_name=_('name'),
|
||||
|
|
@ -346,12 +347,12 @@ class Plate(TranslatedFieldsMixin, models.Model):
|
|||
verbose_name = _('plate')
|
||||
verbose_name_plural = _('plates')
|
||||
|
||||
def __str__(self):
|
||||
return f'plate_id:{self.id}'
|
||||
|
||||
|
||||
class Menu(TranslatedFieldsMixin, BaseAttributes):
|
||||
"""Menu model."""
|
||||
|
||||
STR_FIELD_NAME = 'category'
|
||||
|
||||
category = TJSONField(
|
||||
blank=True, null=True, default=None, verbose_name=_('category'),
|
||||
help_text='{"en-GB":"some text"}')
|
||||
|
|
@ -362,3 +363,18 @@ class Menu(TranslatedFieldsMixin, BaseAttributes):
|
|||
class Meta:
|
||||
verbose_name = _('menu')
|
||||
verbose_name_plural = _('menu')
|
||||
|
||||
|
||||
class SocialNetwork(models.Model):
|
||||
establishment = models.ForeignKey(
|
||||
'Establishment', verbose_name=_('establishment'),
|
||||
related_name='socials', on_delete=models.CASCADE)
|
||||
title = models.CharField(_('title'), max_length=255)
|
||||
url = models.URLField(_('URL'))
|
||||
|
||||
class Meta:
|
||||
verbose_name = _('social network')
|
||||
verbose_name_plural = _('social networks')
|
||||
|
||||
def __str__(self):
|
||||
return self.title
|
||||
|
|
|
|||
3
apps/establishment/serializers/__init__.py
Normal file
3
apps/establishment/serializers/__init__.py
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
from establishment.serializers.common import *
|
||||
from establishment.serializers.web import *
|
||||
from establishment.serializers.back import *
|
||||
55
apps/establishment/serializers/back.py
Normal file
55
apps/establishment/serializers/back.py
Normal file
|
|
@ -0,0 +1,55 @@
|
|||
from establishment.serializers import EstablishmentBaseSerializer, PlateSerializer
|
||||
from rest_framework import serializers
|
||||
from establishment import models
|
||||
from main.models import Currency
|
||||
|
||||
class EstablishmentListCreateSerializer(EstablishmentBaseSerializer):
|
||||
"""Establishment create serializer"""
|
||||
|
||||
type_id = serializers.PrimaryKeyRelatedField(
|
||||
source='establishment_type',
|
||||
queryset=models.EstablishmentType.objects.all(), write_only=True
|
||||
)
|
||||
|
||||
class Meta:
|
||||
model = models.Establishment
|
||||
fields = [
|
||||
'id',
|
||||
'name',
|
||||
'website',
|
||||
'phone',
|
||||
'email',
|
||||
'price_level',
|
||||
'toque_number',
|
||||
'type_id',
|
||||
'type'
|
||||
]
|
||||
|
||||
|
||||
class SocialNetworkSerializers(serializers.ModelSerializer):
|
||||
"""Social network serializers."""
|
||||
class Meta:
|
||||
model = models.SocialNetwork
|
||||
fields = [
|
||||
'id',
|
||||
'establishment',
|
||||
'title',
|
||||
'url',
|
||||
]
|
||||
|
||||
|
||||
class PlatesSerializers(PlateSerializer):
|
||||
"""Social network serializers."""
|
||||
name = serializers.JSONField()
|
||||
currency_id = serializers.PrimaryKeyRelatedField(
|
||||
source='currency',
|
||||
queryset=Currency.objects.all(), write_only=True
|
||||
)
|
||||
|
||||
class Meta:
|
||||
model = models.Plate
|
||||
fields = PlateSerializer.Meta.fields + [
|
||||
'name',
|
||||
'currency_id',
|
||||
'menu'
|
||||
]
|
||||
|
|
@ -32,7 +32,7 @@ class ContactEmailsSerializer(serializers.ModelSerializer):
|
|||
|
||||
class PlateSerializer(serializers.ModelSerializer):
|
||||
|
||||
name_translated = serializers.CharField(allow_null=True)
|
||||
name_translated = serializers.CharField(allow_null=True, read_only=True)
|
||||
currency = CurrencySerializer(read_only=True)
|
||||
|
||||
class Meta:
|
||||
|
|
@ -47,14 +47,31 @@ class PlateSerializer(serializers.ModelSerializer):
|
|||
|
||||
class MenuSerializers(serializers.ModelSerializer):
|
||||
plates = PlateSerializer(read_only=True, many=True, source='plate_set')
|
||||
category = serializers.JSONField()
|
||||
category_translated = serializers.CharField(read_only=True)
|
||||
|
||||
class Meta:
|
||||
model = models.Menu
|
||||
fields = [
|
||||
'id',
|
||||
'category',
|
||||
'category_translated',
|
||||
'plates'
|
||||
'plates',
|
||||
'establishment'
|
||||
]
|
||||
|
||||
|
||||
class MenuRUDSerializers(serializers.ModelSerializer):
|
||||
plates = PlateSerializer(read_only=True, many=True, source='plate_set')
|
||||
category = serializers.JSONField()
|
||||
|
||||
class Meta:
|
||||
model = models.Menu
|
||||
fields = [
|
||||
'id',
|
||||
'category',
|
||||
'plates',
|
||||
'establishment'
|
||||
]
|
||||
|
||||
|
||||
|
|
@ -127,8 +144,7 @@ class EstablishmentEmployeeSerializer(serializers.ModelSerializer):
|
|||
|
||||
class EstablishmentBaseSerializer(serializers.ModelSerializer):
|
||||
"""Base serializer for Establishment model."""
|
||||
name_translated = serializers.CharField(allow_null=True)
|
||||
type = EstablishmentTypeSerializer(source='establishment_type')
|
||||
type = EstablishmentTypeSerializer(source='establishment_type', read_only=True)
|
||||
subtypes = EstablishmentSubTypeSerializer(many=True)
|
||||
address = AddressSerializer()
|
||||
tags = MetaDataContentSerializer(many=True)
|
||||
|
|
@ -140,7 +156,7 @@ class EstablishmentBaseSerializer(serializers.ModelSerializer):
|
|||
model = models.Establishment
|
||||
fields = [
|
||||
'id',
|
||||
'name_translated',
|
||||
'name',
|
||||
'price_level',
|
||||
'toque_number',
|
||||
'public_mark',
|
||||
0
apps/establishment/serializers/web.py
Normal file
0
apps/establishment/serializers/web.py
Normal file
19
apps/establishment/urls/back.py
Normal file
19
apps/establishment/urls/back.py
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
"""Establishment url patterns for backoffice."""
|
||||
|
||||
from django.urls import path
|
||||
|
||||
from establishment import views
|
||||
|
||||
app_name = 'establishment'
|
||||
|
||||
|
||||
urlpatterns = [
|
||||
path('', views.EstablishmentListCreateView.as_view(), name='list'),
|
||||
path('<int:pk>/', views.EstablishmentRetrieveView.as_view(), name='detail'),
|
||||
path('menus/', views.MenuListCreateView.as_view(), name='menu-list'),
|
||||
path('menus/<int:pk>/', views.MenuRUDView.as_view(), name='menu-rud'),
|
||||
path('plates/', views.PlateListCreateView.as_view(), name='plates'),
|
||||
path('plates/<int:pk>/', views.PlateListCreateView.as_view(), name='plate-rud'),
|
||||
path('socials/', views.SocialListCreateView.as_view(), name='socials'),
|
||||
path('socials/<int:pk>/', views.SocialRUDView.as_view(), name='social-rud'),
|
||||
]
|
||||
3
apps/establishment/views/__init__.py
Normal file
3
apps/establishment/views/__init__.py
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
from establishment.views.common import *
|
||||
from establishment.views.web import *
|
||||
from establishment.views.back import *
|
||||
50
apps/establishment/views/back.py
Normal file
50
apps/establishment/views/back.py
Normal file
|
|
@ -0,0 +1,50 @@
|
|||
"""Establishment app views."""
|
||||
|
||||
from rest_framework import generics
|
||||
|
||||
from establishment import models, serializers
|
||||
from establishment.views.common import EstablishmentMixin
|
||||
|
||||
|
||||
class EstablishmentListCreateView(EstablishmentMixin, generics.ListCreateAPIView):
|
||||
"""Establishment list/create view."""
|
||||
queryset = models.Establishment.objects.all()
|
||||
serializer_class = serializers.EstablishmentListCreateSerializer
|
||||
|
||||
|
||||
class MenuListCreateView(generics.ListCreateAPIView):
|
||||
"""Menu list create view."""
|
||||
serializer_class = serializers.MenuSerializers
|
||||
queryset = models.Menu.objects.all()
|
||||
|
||||
|
||||
class MenuRUDView(generics.RetrieveUpdateDestroyAPIView):
|
||||
"""Menu RUD view."""
|
||||
serializer_class = serializers.MenuRUDSerializers
|
||||
queryset = models.Menu.objects.all()
|
||||
|
||||
|
||||
class SocialListCreateView(generics.ListCreateAPIView):
|
||||
"""Social list create view."""
|
||||
serializer_class = serializers.SocialNetworkSerializers
|
||||
queryset = models.SocialNetwork.objects.all()
|
||||
pagination_class = None
|
||||
|
||||
|
||||
class SocialRUDView(generics.RetrieveUpdateDestroyAPIView):
|
||||
"""Social RUD view."""
|
||||
serializer_class = serializers.SocialNetworkSerializers
|
||||
queryset = models.SocialNetwork.objects.all()
|
||||
|
||||
|
||||
class PlateListCreateView(generics.ListCreateAPIView):
|
||||
"""Plate list create view."""
|
||||
serializer_class = serializers.PlatesSerializers
|
||||
queryset = models.Plate.objects.all()
|
||||
pagination_class = None
|
||||
|
||||
|
||||
class PlateRUDView(generics.RetrieveUpdateDestroyAPIView):
|
||||
"""Social RUD view."""
|
||||
serializer_class = serializers.PlatesSerializers
|
||||
queryset = models.Plate.objects.all()
|
||||
15
apps/establishment/views/common.py
Normal file
15
apps/establishment/views/common.py
Normal file
|
|
@ -0,0 +1,15 @@
|
|||
"""Establishment app views."""
|
||||
|
||||
from rest_framework import permissions
|
||||
|
||||
from establishment import models
|
||||
|
||||
|
||||
class EstablishmentMixin:
|
||||
"""Establishment mixin."""
|
||||
|
||||
permission_classes = (permissions.AllowAny,)
|
||||
|
||||
def get_queryset(self):
|
||||
"""Overrided method 'get_queryset'."""
|
||||
return models.Establishment.objects.all().prefetch_actual_employees()
|
||||
|
|
@ -7,16 +7,7 @@ from comment import models as comment_models
|
|||
from establishment import filters
|
||||
from establishment import models, serializers
|
||||
from utils.views import JWTGenericViewMixin
|
||||
|
||||
|
||||
class EstablishmentMixin:
|
||||
"""Establishment mixin."""
|
||||
|
||||
permission_classes = (permissions.AllowAny,)
|
||||
|
||||
def get_queryset(self):
|
||||
"""Overrided method 'get_queryset'."""
|
||||
return models.Establishment.objects.all().prefetch_actual_employees()
|
||||
from establishment.views import EstablishmentMixin
|
||||
|
||||
|
||||
class EstablishmentListView(EstablishmentMixin, JWTGenericViewMixin, generics.ListAPIView):
|
||||
|
|
@ -25,7 +16,7 @@ class EstablishmentListView(EstablishmentMixin, JWTGenericViewMixin, generics.Li
|
|||
filter_class = filters.EstablishmentFilter
|
||||
|
||||
def get_queryset(self):
|
||||
"""Overrided method 'get_queryset'."""
|
||||
"""Overridden method 'get_queryset'."""
|
||||
qs = super(EstablishmentListView, self).get_queryset()
|
||||
return qs.by_country_code(code=self.request.country_code)\
|
||||
.annotate_in_favorites(user=self.request.user)
|
||||
|
|
@ -8,7 +8,7 @@ urlpatterns = [
|
|||
# path('account/', include('account.urls.web')),
|
||||
# path('advertisement/', include('advertisement.urls.web')),
|
||||
# path('collection/', include('collection.urls.web')),
|
||||
# path('establishments/', include('establishment.urls.web')),
|
||||
path('establishments/', include('establishment.urls.back')),
|
||||
# path('news/', include('news.urls.web')),
|
||||
# path('partner/', include('partner.urls.web')),
|
||||
]
|
||||
Loading…
Reference in New Issue
Block a user