"""Establishment app views.""" from django.shortcuts import get_object_or_404 from rest_framework import generics, status from establishment import models, serializers from rest_framework.response import Response from timetable.serialziers import ScheduleRUDSerializer, ScheduleCreateSerializer class EstablishmentMixinViews: """Establishment mixin.""" def get_queryset(self): """Overrided method 'get_queryset'.""" return models.Establishment.objects.published().with_base_related() class EstablishmentListCreateView(EstablishmentMixinViews, generics.ListCreateAPIView): """Establishment list/create view.""" queryset = models.Establishment.objects.all() serializer_class = serializers.EstablishmentListCreateSerializer class EstablishmentRUDView(generics.RetrieveUpdateDestroyAPIView): queryset = models.Establishment.objects.all() serializer_class = serializers.EstablishmentRUDSerializer class EstablishmentScheduleRUDView(generics.RetrieveUpdateDestroyAPIView): """Establishment schedule RUD view""" serializer_class = ScheduleRUDSerializer def get_object(self): """ Returns the object the view is displaying. """ establishment_pk = self.kwargs['pk'] schedule_id = self.kwargs['schedule_id'] establishment = get_object_or_404(klass=models.Establishment.objects.all(), pk=establishment_pk) schedule = get_object_or_404(klass=establishment.schedule, id=schedule_id) # May raise a permission denied self.check_object_permissions(self.request, establishment) self.check_object_permissions(self.request, schedule) return schedule class EstablishmentScheduleCreateView(generics.CreateAPIView): """Establishment schedule Create view""" serializer_class = ScheduleCreateSerializer class EstablishmentTagCategoryListView(EstablishmentMixinViews, generics.RetrieveAPIView): """View for establishment tag categories.""" serializer_class = serializers.EstablishmentTagsByType pagination_class = None def get_object(self): """ Returns the object the view is displaying. """ queryset = super(EstablishmentTagCategoryListView, self).get_queryset() # Perform the lookup filtering. lookup_url_kwarg = self.lookup_url_kwarg or self.lookup_field filter_kwargs = {self.lookup_field: self.kwargs[lookup_url_kwarg]} obj = get_object_or_404(queryset, **filter_kwargs) # May raise a permission denied self.check_object_permissions(self.request, obj) return obj.establishment_type class EstablishmentTypeAttachTagCategoryView(generics.CreateAPIView): """Attach tag category to establishment type.""" serializer_class = serializers.EstablishmentTypeTagCategoryBaseSerializer def get_queryset(self): """Override get_queryset method.""" return models.EstablishmentTypeTagCategory.objects.with_base_related() def post(self, request, *args, **kwargs): """Overridden post-method.""" super(EstablishmentTypeAttachTagCategoryView, self).post(request) return Response(status=status.HTTP_200_OK) class EstablishmentTagCreateView(EstablishmentMixinViews, generics.CreateAPIView): """Attach tag to establishment.""" serializer_class = serializers.EstablishmentTagCreateSerializer 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() class PhonesListCreateView(generics.ListCreateAPIView): """Plate list create view.""" serializer_class = serializers.ContactPhoneBackSerializers queryset = models.ContactPhone.objects.all() pagination_class = None class PhonesRUDView(generics.RetrieveUpdateDestroyAPIView): """Social RUD view.""" serializer_class = serializers.ContactPhoneBackSerializers queryset = models.ContactPhone.objects.all() class EmailListCreateView(generics.ListCreateAPIView): """Plate list create view.""" serializer_class = serializers.ContactEmailBackSerializers queryset = models.ContactEmail.objects.all() pagination_class = None class EmailRUDView(generics.RetrieveUpdateDestroyAPIView): """Social RUD view.""" serializer_class = serializers.ContactEmailBackSerializers queryset = models.ContactEmail.objects.all() class EmployeeListCreateView(generics.ListCreateAPIView): """Emplyoee list create view.""" serializer_class = serializers.EmployeeBackSerializers queryset = models.Employee.objects.all() pagination_class = None class EmployeeRUDView(generics.RetrieveUpdateDestroyAPIView): """Social RUD view.""" serializer_class = serializers.EmployeeBackSerializers queryset = models.Employee.objects.all() class EstablishmentTypeListCreateView(generics.ListCreateAPIView): """Establishment type list/create view.""" serializer_class = serializers.EstablishmentTypeBaseSerializer queryset = models.EstablishmentType.objects.all() pagination_class = None class EstablishmentTypeRUDView(generics.RetrieveUpdateDestroyAPIView): """Establishment type retrieve/update/destroy view.""" serializer_class = serializers.EstablishmentTypeBaseSerializer queryset = models.EstablishmentType.objects.all() class EstablishmentTypeTagListView(generics.ListAPIView): """List of tags with categories by establishment type.""" serializer_class = serializers.EstablishmentTagsByType queryset = models.EstablishmentType.objects.all() pagination_class = None class EstablishmentSubtypeListCreateView(generics.ListCreateAPIView): """Establishment subtype list/create view.""" serializer_class = serializers.EstablishmentSubTypeBaseSerializer queryset = models.EstablishmentSubType.objects.all() pagination_class = None class EstablishmentSubtypeRUDView(generics.RetrieveUpdateDestroyAPIView): """Establishment subtype retrieve/update/destroy view.""" serializer_class = serializers.EstablishmentSubTypeBaseSerializer queryset = models.EstablishmentSubType.objects.all() class EstablishmentSubTypeAttachTagCategoryView(generics.CreateAPIView): """Attach tag category to establishment subtype.""" serializer_class = serializers.EstablishmentSubTypeTagCategoryBaseSerializer def get_queryset(self): """Override get_queryset method.""" return models.EstablishmentSubTypeTagCategory.objects.with_base_related() def post(self, request, *args, **kwargs): """Overridden post-method.""" super(EstablishmentSubTypeAttachTagCategoryView, self).post(request) return Response(status=status.HTTP_200_OK)