371 lines
10 KiB
Python
371 lines
10 KiB
Python
from django.contrib.contenttypes.models import ContentType
|
|
from django.utils.translation import gettext_lazy as _
|
|
from django_filters.rest_framework import DjangoFilterBackend
|
|
from rest_framework import generics, status
|
|
from rest_framework.generics import get_object_or_404
|
|
from rest_framework.response import Response
|
|
|
|
from establishment.models import Employee
|
|
from establishment.serializers.back import EmployeeBackSerializers
|
|
from main import serializers
|
|
from main import tasks
|
|
from main.filters import AwardFilter, AwardTypeFilterSet
|
|
from main.models import Award, Footer, PageType, Panel, SiteFeature, Feature, AwardType, Carousel
|
|
from main.serializers.back import PanelSerializer, BackCarouselListSerializer
|
|
from main.views import SiteSettingsView, SiteListView
|
|
from utils.methods import get_permission_classes
|
|
|
|
|
|
class AwardLstView(generics.ListCreateAPIView):
|
|
"""
|
|
## List of awards
|
|
### *GET*
|
|
#### Description
|
|
Return paginated list of awards.
|
|
Available filters:
|
|
* establishment_id (`int`) - Filter by establishment identifier
|
|
* product_id (`int`) - Filter by product identifier
|
|
* employee_id (`int`) - Filter by employee identifier
|
|
* state (`enum`) - `0 (Waiting)`, `1 (Published)`
|
|
* award_type (`str`) - Filter by award type identifier
|
|
* vintage_year (`str`) - Filter by a vintage year
|
|
##### Response
|
|
E.g.:
|
|
```
|
|
{
|
|
"count": 58,
|
|
"next": 2,
|
|
"previous": null,
|
|
"results": [
|
|
{
|
|
"id": 1,
|
|
...
|
|
}
|
|
]
|
|
}
|
|
```
|
|
|
|
### *POST*
|
|
#### Description
|
|
Create a record in Award table.
|
|
##### Request
|
|
Required:
|
|
* content_type (`int`) - identifier of content type entity
|
|
* object_id (`int`) - identifier of content object
|
|
* award_type (`int`) - identifier of award type
|
|
* title (`str`) - title of an award
|
|
Non required:
|
|
* vintage_year (str) - vintage year in a format - `yyyy`
|
|
##### Response
|
|
```
|
|
{
|
|
"id": 1,
|
|
...
|
|
}
|
|
```
|
|
"""
|
|
queryset = Award.objects.all().with_base_related()
|
|
serializer_class = serializers.BackAwardSerializer
|
|
permission_classes = get_permission_classes()
|
|
filterset_class = AwardFilter
|
|
|
|
|
|
class AwardCreateAndBind(generics.CreateAPIView):
|
|
"""
|
|
## Creating an Award for an Employee.
|
|
### *POST*
|
|
#### Description
|
|
Creating an Award for an Employee and return in response
|
|
serialized Employee object.
|
|
##### Response
|
|
E.g.
|
|
```
|
|
{
|
|
"id": 1,
|
|
...
|
|
}
|
|
```
|
|
##### Request
|
|
Required:
|
|
* award_type (`int`) - identifier of award type
|
|
* title (`str`) - title of an award
|
|
Non required:
|
|
* vintage_year (str) - vintage year in a format - `yyyy`
|
|
##### Response
|
|
E.g.
|
|
```
|
|
{
|
|
"id": 1,
|
|
...
|
|
}
|
|
```
|
|
"""
|
|
queryset = Award.objects.all().with_base_related()
|
|
serializer_class = serializers.BackAwardEmployeeCreateSerializer
|
|
permission_classes = get_permission_classes()
|
|
|
|
def create(self, request, *args, **kwargs):
|
|
"""Overridden create method."""
|
|
serializer = self.get_serializer(data=request.data)
|
|
serializer.is_valid(raise_exception=True)
|
|
self.perform_create(serializer)
|
|
response_serializer = EmployeeBackSerializers(Employee.objects.get(pk=kwargs['employee_id']))
|
|
headers = self.get_success_headers(response_serializer.data)
|
|
return Response(response_serializer.data, status=status.HTTP_201_CREATED, headers=headers)
|
|
|
|
|
|
class AwardRUDView(generics.RetrieveUpdateDestroyAPIView):
|
|
"""
|
|
## Retrieve/Update/Destroy Award view
|
|
### *GET*
|
|
#### Description
|
|
Retrieving serialized object of an Award by an identifier
|
|
#### Response
|
|
E.g.
|
|
```
|
|
{
|
|
"id": 1,
|
|
...
|
|
}
|
|
```
|
|
|
|
### *PATCH*
|
|
#### Description
|
|
Partially update Award object by identifier
|
|
##### Request
|
|
Available:
|
|
* content_type (`int`) - identifier of content type entity
|
|
* object_id (`int`) - identifier of content object
|
|
* award_type (`int`) - identifier of award type
|
|
* title (`str`) - title of an award
|
|
* vintage_year (str) - vintage year in a format - `yyyy`
|
|
##### Response
|
|
E.g.
|
|
```
|
|
{
|
|
"id": 1,
|
|
...
|
|
}
|
|
```
|
|
|
|
### *DELETE*
|
|
#### Description
|
|
Delete an Award instance by award identifier
|
|
##### Request
|
|
```
|
|
No request data
|
|
```
|
|
##### Response
|
|
E.g.
|
|
```
|
|
No content
|
|
```
|
|
"""
|
|
queryset = Award.objects.all().with_base_related()
|
|
serializer_class = serializers.BackAwardSerializer
|
|
permission_classes = get_permission_classes()
|
|
lookup_field = 'id'
|
|
|
|
|
|
class AwardTypesListView(generics.ListAPIView):
|
|
"""
|
|
## List of Award types view.
|
|
### *GET*
|
|
#### Description
|
|
Return non paginated list of Award types filtered by request country code.
|
|
Available filters:
|
|
* id (`int`) - award type identifier
|
|
* name (`str`) - award type name
|
|
##### Response
|
|
```
|
|
[
|
|
{
|
|
"id": 1,
|
|
...
|
|
}
|
|
]
|
|
```
|
|
"""
|
|
pagination_class = None
|
|
serializer_class = serializers.AwardTypeBaseSerializer
|
|
permission_classes = get_permission_classes()
|
|
lookup_field = 'id'
|
|
filter_class = AwardTypeFilterSet
|
|
|
|
def get_queryset(self):
|
|
"""An overridden get_queryset method."""
|
|
if hasattr(self, 'request') and hasattr(self.request, 'country_code'):
|
|
return AwardType.objects.by_country_code(self.request.country_code)
|
|
return AwardType.objects.none()
|
|
|
|
|
|
class ContentTypeView(generics.ListAPIView):
|
|
"""ContentType list view"""
|
|
queryset = ContentType.objects.all()
|
|
serializer_class = serializers.ContentTypeBackSerializer
|
|
permission_classes = get_permission_classes()
|
|
filter_backends = (DjangoFilterBackend,)
|
|
ordering_fields = '__all__'
|
|
lookup_field = 'id'
|
|
filterset_fields = (
|
|
'id',
|
|
'model',
|
|
'app_label',
|
|
)
|
|
|
|
|
|
class FeatureBackView(generics.ListCreateAPIView):
|
|
"""Feature list or create View."""
|
|
serializer_class = serializers.FeatureSerializer
|
|
queryset = Feature.objects.all()
|
|
permission_classes = get_permission_classes()
|
|
|
|
|
|
class SiteFeatureBackView(generics.ListCreateAPIView):
|
|
"""Feature list or create View."""
|
|
serializer_class = serializers.SiteFeatureSerializer
|
|
queryset = SiteFeature.objects.all()
|
|
pagination_class = None
|
|
permission_classes = get_permission_classes()
|
|
|
|
|
|
class FeatureRUDBackView(generics.RetrieveUpdateDestroyAPIView):
|
|
"""Feature RUD View."""
|
|
serializer_class = serializers.FeatureSerializer
|
|
queryset = SiteFeature.objects.all()
|
|
permission_classes = get_permission_classes()
|
|
|
|
|
|
class SiteFeatureRUDBackView(generics.RetrieveUpdateDestroyAPIView):
|
|
"""Feature RUD View."""
|
|
serializer_class = serializers.SiteFeatureSerializer
|
|
queryset = SiteFeature.objects.all()
|
|
permission_classes = get_permission_classes()
|
|
|
|
|
|
class SiteSettingsBackOfficeView(SiteSettingsView):
|
|
"""Site settings View."""
|
|
serializer_class = serializers.SiteSerializer
|
|
permission_classes = get_permission_classes()
|
|
|
|
|
|
class SiteListBackOfficeView(SiteListView):
|
|
"""Site settings View."""
|
|
serializer_class = serializers.SiteSerializer
|
|
permission_classes = get_permission_classes()
|
|
|
|
|
|
class FooterBackView(generics.ListCreateAPIView):
|
|
"""Footer back list/create view."""
|
|
serializer_class = serializers.FooterBackSerializer
|
|
queryset = Footer.objects.all()
|
|
permission_classes = get_permission_classes()
|
|
|
|
|
|
class FooterRUDBackView(generics.RetrieveUpdateDestroyAPIView):
|
|
"""Footer back RUD view."""
|
|
serializer_class = serializers.FooterBackSerializer
|
|
queryset = Footer.objects.all()
|
|
permission_classes = get_permission_classes()
|
|
|
|
|
|
class PageTypeListCreateView(generics.ListCreateAPIView):
|
|
"""PageType back office view."""
|
|
pagination_class = None
|
|
serializer_class = serializers.PageTypeBaseSerializer
|
|
queryset = PageType.objects.all()
|
|
permission_classes = get_permission_classes()
|
|
|
|
|
|
class PanelsListCreateView(generics.ListCreateAPIView):
|
|
"""Custom panels view."""
|
|
serializer_class = PanelSerializer
|
|
queryset = Panel.objects.all()
|
|
permission_classes = get_permission_classes()
|
|
|
|
|
|
class PanelsRUDView(generics.RetrieveUpdateDestroyAPIView):
|
|
"""Custom panels view."""
|
|
serializer_class = PanelSerializer
|
|
queryset = Panel.objects.all()
|
|
permission_classes = get_permission_classes()
|
|
|
|
|
|
class PanelsExecuteView(generics.ListAPIView):
|
|
"""Custom panels view."""
|
|
queryset = Panel.objects.all()
|
|
permission_classes = get_permission_classes()
|
|
|
|
def list(self, request, *args, **kwargs):
|
|
panel = get_object_or_404(Panel, id=self.kwargs['pk'])
|
|
return Response(panel.execute_query(request))
|
|
|
|
|
|
class PanelsExportCSVView(PanelsExecuteView):
|
|
"""Export panels via csv view."""
|
|
queryset = Panel.objects.all()
|
|
permission_classes = get_permission_classes()
|
|
|
|
def list(self, request, *args, **kwargs):
|
|
panel = get_object_or_404(Panel, id=self.kwargs['pk'])
|
|
# make task for celery
|
|
tasks.send_export_to_email.delay(
|
|
panel_id=panel.id, user_id=request.user.id)
|
|
return Response(
|
|
{"success": _('The file will be sent to your email.')},
|
|
status=status.HTTP_200_OK
|
|
)
|
|
|
|
|
|
class PanelsExecuteXLSView(PanelsExecuteView):
|
|
"""Export panels via xlsx view."""
|
|
queryset = Panel.objects.all()
|
|
permission_classes = get_permission_classes()
|
|
|
|
def list(self, request, *args, **kwargs):
|
|
panel = get_object_or_404(Panel, id=self.kwargs['pk'])
|
|
# make task for celery
|
|
tasks.send_export_to_email.delay(
|
|
panel_id=panel.id, user_id=request.user.id, file_type='xls')
|
|
return Response(
|
|
{"success": _('The file will be sent to your email.')},
|
|
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
|