GET carousel for BO

This commit is contained in:
alex 2020-02-07 13:43:20 +03:00
parent c866721c8d
commit 6feb67b0b5
5 changed files with 115 additions and 17 deletions

View File

@ -355,6 +355,17 @@ class PositionBackSerializer(serializers.ModelSerializer):
] ]
class AdminEmployeeBackSerializers(serializers.ModelSerializer):
class Meta:
model = models.Employee
fields = [
'id',
'name',
'last_name',
]
# TODO: test decorator # TODO: test decorator
@with_base_attributes @with_base_attributes
class EmployeeBackSerializers(PhoneMixinSerializer, serializers.ModelSerializer): class EmployeeBackSerializers(PhoneMixinSerializer, serializers.ModelSerializer):
@ -968,6 +979,7 @@ class CardAndWinesSerializer(serializers.ModelSerializer):
class TeamMemberSerializer(serializers.ModelSerializer): class TeamMemberSerializer(serializers.ModelSerializer):
"""Serializer for team establishment BO section""" """Serializer for team establishment BO section"""
class Meta: class Meta:
model = account_models.User model = account_models.User
fields = ( fields = (

View File

@ -292,8 +292,8 @@ class CardAndWinesListView(generics.RetrieveAPIView):
queryset = models.Establishment.objects.with_base_related() queryset = models.Establishment.objects.with_base_related()
def get_object(self): def get_object(self):
establishment = models.Establishment.objects.prefetch_plates()\ establishment = models.Establishment.objects.prefetch_plates() \
.filter(pk=self.kwargs['establishment_id'])\ .filter(pk=self.kwargs['establishment_id']) \
.first() .first()
if establishment is None: if establishment is None:
raise Http404 raise Http404
@ -705,7 +705,7 @@ class EmployeesListSearchViews(generics.ListAPIView):
serializer_class = serializers.EmployeeBackSerializers serializer_class = serializers.EmployeeBackSerializers
queryset = ( queryset = (
models.Employee.objects.with_back_office_related() models.Employee.objects.with_back_office_related()
.select_related('photo') .select_related('photo')
) )
permission_classes = get_permission_classes( permission_classes = get_permission_classes(
IsEstablishmentManager, IsEstablishmentManager,
@ -827,6 +827,42 @@ class EmployeeRUDView(generics.RetrieveUpdateDestroyAPIView):
) )
class AdminEmployeeListView(generics.ListAPIView):
"""
## Employee list view, where request user is admin.
### *GET*
#### Description
Return paginated list of employees with available filters:
* search (`str`) - filter by name or last name with mistakes
* position_id (`int`) - filter by employees position identifier
* public_mark (`str`) - filter by establishment public mark
* toque_number (`str`) - filter by establishment toque number
* username (`str`) - filter by a username or name
#### Response
```
{
"id": 1324,
"name": "Alex",
"establishment_id": 1324,
"establishment_type": 1324,
"establishment_subtype": 1324,
"establishment_slug": "slug",
{
```
"""
serializer_class = serializers.EmployeeBackSerializers
queryset = models.Employee.objects.all().distinct().with_back_office_related()
permission_classes = get_permission_classes(IsEstablishmentAdministrator, )
def get_queryset(self):
qs = super().get_queryset()
if self.request.country_code:
qs = qs.filter(establishments__address__city__country__code=self.request.country_code)
return qs
class RemoveAwardView(generics.DestroyAPIView): class RemoveAwardView(generics.DestroyAPIView):
""" """
## Remove award view. ## Remove award view.
@ -1226,10 +1262,10 @@ class EstablishmentGuideCreateDestroyView(generics.GenericAPIView):
lookup_url_kwarg = getattr(self, 'establishment_lookup_url_kwarg', None) lookup_url_kwarg = getattr(self, 'establishment_lookup_url_kwarg', None)
assert lookup_url_kwarg in self.kwargs, ( assert lookup_url_kwarg in self.kwargs, (
'Expected view %s to be called with a URL keyword argument ' 'Expected view %s to be called with a URL keyword argument '
'named "%s". Fix your URL conf, or set the `.lookup_field` ' 'named "%s". Fix your URL conf, or set the `.lookup_field` '
'attribute on the view correctly.' % 'attribute on the view correctly.' %
(self.__class__.__name__, lookup_url_kwarg) (self.__class__.__name__, lookup_url_kwarg)
) )
filters = {'klass': queryset, lookup_url_kwarg: self.kwargs.get(lookup_url_kwarg)} filters = {'klass': queryset, lookup_url_kwarg: self.kwargs.get(lookup_url_kwarg)}
@ -1247,10 +1283,10 @@ class EstablishmentGuideCreateDestroyView(generics.GenericAPIView):
lookup_url_kwarg = getattr(self, 'guide_lookup_url_kwarg', None) lookup_url_kwarg = getattr(self, 'guide_lookup_url_kwarg', None)
assert lookup_url_kwarg in self.kwargs, ( assert lookup_url_kwarg in self.kwargs, (
'Expected view %s to be called with a URL keyword argument ' 'Expected view %s to be called with a URL keyword argument '
'named "%s". Fix your URL conf, or set the `.lookup_field` ' 'named "%s". Fix your URL conf, or set the `.lookup_field` '
'attribute on the view correctly.' % 'attribute on the view correctly.' %
(self.__class__.__name__, lookup_url_kwarg) (self.__class__.__name__, lookup_url_kwarg)
) )
obj = get_object_or_404(klass=queryset, id=self.kwargs.get(lookup_url_kwarg)) obj = get_object_or_404(klass=queryset, id=self.kwargs.get(lookup_url_kwarg))
@ -1431,4 +1467,4 @@ class EstablishmentAwardCreateAndBind(generics.CreateAPIView, generics.DestroyAP
def delete(self, request, *args, **kwargs): def delete(self, request, *args, **kwargs):
establishment = get_object_or_404(models.Establishment, id=kwargs['establishment_id']) establishment = get_object_or_404(models.Establishment, id=kwargs['establishment_id'])
establishment.remove_award(kwargs['award_id']) establishment.remove_award(kwargs['award_id'])
return self._award_list_for_establishment(kwargs['establishment_id'], status.HTTP_200_OK) return self._award_list_for_establishment(kwargs['establishment_id'], status.HTTP_200_OK)

View File

@ -3,6 +3,7 @@ from rest_framework import serializers
from account.models import User from account.models import User
from account.serializers import BackUserSerializer from account.serializers import BackUserSerializer
from main import models from main import models
from main.serializers import CarouselListSerializer
class PanelSerializer(serializers.ModelSerializer): class PanelSerializer(serializers.ModelSerializer):
@ -27,3 +28,16 @@ class PanelSerializer(serializers.ModelSerializer):
'user', 'user',
'user_id' 'user_id'
] ]
class BackCarouselListSerializer(CarouselListSerializer):
"""Serializer for retrieving list of carousel items."""
class Meta:
"""Meta class."""
model = models.Carousel
fields = CarouselListSerializer.Meta.fields + [
'active',
'is_parse',
]

View File

@ -29,7 +29,6 @@ urlpatterns = [
path('panels/<int:pk>/', views.PanelsRUDView.as_view(), name='panels-rud'), path('panels/<int:pk>/', views.PanelsRUDView.as_view(), name='panels-rud'),
path('panels/<int:pk>/execute/', views.PanelsExecuteView.as_view(), name='panels-execute'), path('panels/<int:pk>/execute/', views.PanelsExecuteView.as_view(), name='panels-execute'),
path('panels/<int:pk>/csv/', views.PanelsExportCSVView.as_view(), name='panels-csv'), path('panels/<int:pk>/csv/', views.PanelsExportCSVView.as_view(), name='panels-csv'),
path('panels/<int:pk>/xls/', views.PanelsExecuteXLSView.as_view(), name='panels-xls') path('panels/<int:pk>/xls/', views.PanelsExecuteXLSView.as_view(), name='panels-xls'),
path('carousel/', views.BackCarouselListView.as_view(), name='carousel-list'),
] ]

View File

@ -10,8 +10,8 @@ from establishment.serializers.back import EmployeeBackSerializers
from main import serializers from main import serializers
from main import tasks from main import tasks
from main.filters import AwardFilter, AwardTypeFilterSet from main.filters import AwardFilter, AwardTypeFilterSet
from main.models import Award, Footer, PageType, Panel, SiteFeature, Feature, AwardType from main.models import Award, Footer, PageType, Panel, SiteFeature, Feature, AwardType, Carousel
from main.serializers.back import PanelSerializer from main.serializers.back import PanelSerializer, BackCarouselListSerializer
from main.views import SiteSettingsView, SiteListView from main.views import SiteSettingsView, SiteListView
from utils.methods import get_permission_classes from utils.methods import get_permission_classes
@ -331,3 +331,40 @@ class PanelsExecuteXLSView(PanelsExecuteView):
{"success": _('The file will be sent to your email.')}, {"success": _('The file will be sent to your email.')},
status=status.HTTP_200_OK status=status.HTTP_200_OK
) )
class BackCarouselListView(generics.ListAPIView):
"""
## List of carousel.
### *GET*
#### Description
Return list of carousel items.
##### Response
E.g.:
```
{
"id": 1,
"model_name": "model_name",
"name": "name",
...
"awards": [
{
"id": 1,
...
}
]
}
```
"""
queryset = Carousel.objects.all()
serializer_class = BackCarouselListSerializer
permission_classes = get_permission_classes()
pagination_class = None
def get_queryset(self):
country_code = self.request.country_code
qs = Carousel.objects.all()
if country_code:
qs = qs.by_country_code(country_code)
return qs