You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
240 lines
8.5 KiB
240 lines
8.5 KiB
from django.conf import settings
|
|
from django.db.models import Q, F
|
|
from rest_framework import permissions
|
|
from rest_framework.pagination import PageNumberPagination
|
|
from rest_framework.viewsets import ModelViewSet
|
|
|
|
from projects.models import Project, Realty, Stage, Portfolio, PortfolioPhoto, Answer, AnswerFile, Order
|
|
|
|
from projects.serializers import (
|
|
ProjectSerializer, RealtySerializer, StageSerializer, PortfolioSerializer,
|
|
PortfolioPhotoSerializer, AnswerSerializer, OrderSerializer, AnswerFileSerializer,
|
|
)
|
|
|
|
from projects.filters import (
|
|
ProjectFilterSet, RealtyFilterSet, StageFilterSet, PortfolioFilterSet, OrderFilterSet,
|
|
PortfolioPhotoFilterSet, AnswerFilterSet,
|
|
)
|
|
|
|
from specializations.models import Specialization
|
|
from specializations.serializers import SpecializationSerializer
|
|
from specializations.filters import SpecializationFilterSet
|
|
|
|
from users.models import User, ContractorResumeFiles, ContractorResume, Team
|
|
from users.serializers import UserSerializer, ContractorResumeFilesSerializer, ContractorResumeSerializer, TeamSerializer
|
|
from users.filters import UserFilterSet, TeamFilterSet, ContractorResumeFilesFilterSet, ContractorResumeFilterSet
|
|
|
|
from common.models import Location
|
|
from common.serializers import LocationSerializer
|
|
from common.filters import LocationFilterSet
|
|
|
|
from chat.models import Message, Notes, Documents, NewMessage
|
|
from chat.serializers import MessageSerializer, NoteSerializer, DocumentsSerializer
|
|
from chat.filters import MessageFilterSet, NoteFilterSet, DocumentFilterSet
|
|
|
|
from reviews.models import Review
|
|
from reviews.serializers import ReviewSerializer
|
|
from reviews.filters import ReviewFilterSet
|
|
|
|
from work_sell.models import WorkSell, WorkSellPhoto
|
|
from work_sell.serializers import WorkSellSerializer, WorkSellPhotoSerializer
|
|
from work_sell.filters import WorkSellFilterSet, WorkSellPhotoFilterSet
|
|
|
|
|
|
class ContractorResumeFilesViewSet(ModelViewSet):
|
|
queryset = ContractorResumeFiles.objects.all()
|
|
serializer_class = ContractorResumeFilesSerializer
|
|
# filter_class = ContractorResumeFilesFilterSet
|
|
permission_classes = (permissions.IsAuthenticatedOrReadOnly,)
|
|
|
|
|
|
class ContractorResumeViewSet(ModelViewSet):
|
|
queryset = ContractorResume.objects.all()
|
|
serializer_class = ContractorResumeSerializer
|
|
# filter_class = ContractorResumeFilterSet
|
|
permission_classes = (permissions.IsAuthenticatedOrReadOnly,)
|
|
|
|
|
|
class StageViewSet(ModelViewSet):
|
|
queryset = Stage.objects.all()
|
|
serializer_class = StageSerializer
|
|
filter_class = StageFilterSet
|
|
permission_classes = (permissions.IsAuthenticatedOrReadOnly,)
|
|
|
|
|
|
class ReviewViewSet(ModelViewSet):
|
|
queryset = Review.objects.all()
|
|
serializer_class = ReviewSerializer
|
|
filter_class = ReviewFilterSet
|
|
permission_classes = (permissions.IsAuthenticatedOrReadOnly,)
|
|
|
|
|
|
class DocumentViewSet(ModelViewSet):
|
|
queryset = Documents.objects.all()
|
|
serializer_class = DocumentsSerializer
|
|
filter_class = DocumentFilterSet
|
|
permission_classes = (permissions.IsAuthenticatedOrReadOnly,)
|
|
|
|
def get_queryset(self):
|
|
queryset = Documents.objects.all()
|
|
search_param = self.request.query_params.get('operand', None)
|
|
recipent_id = self.request.query_params.get('recipent_id', None)
|
|
sender_id = self.request.query_params.get('sender_id', None)
|
|
if search_param:
|
|
# import code; code.interact(local=dict(globals(), **locals()))
|
|
if search_param == 'in':
|
|
queryset = queryset.filter(Q(sender__in=[sender_id, recipent_id]),Q(recipent__in=[sender_id, recipent_id])).filter(order__isnull=True).order_by('created')
|
|
return queryset
|
|
|
|
|
|
class ProjectViewSet(ModelViewSet):
|
|
queryset = Project.objects.all()
|
|
serializer_class = ProjectSerializer
|
|
filter_class = ProjectFilterSet
|
|
# permission_classes = (permissions.IsAuthenticatedOrReadOnly,)
|
|
|
|
def get_queryset(self):
|
|
qs = super().get_queryset()
|
|
|
|
x_no_contractor_answer = self.request.GET.get('x_no_contractor_answer', '')
|
|
|
|
if x_no_contractor_answer.isdecimal():
|
|
qs = qs.exclude(answers__object_id=x_no_contractor_answer, answers__content_type__model='user')
|
|
|
|
return qs
|
|
|
|
|
|
class NoteViewSet(ModelViewSet):
|
|
queryset = Notes.objects.all()
|
|
serializer_class = NoteSerializer
|
|
filter_class = NoteFilterSet
|
|
permission_classes = (permissions.IsAuthenticatedOrReadOnly,)
|
|
|
|
def get_queryset(self):
|
|
queryset = Notes.objects.all()
|
|
search_param = self.request.query_params.get('operand', None)
|
|
recipent_id = self.request.query_params.get('recipent_id', None)
|
|
sender_id = self.request.query_params.get('sender_id', None)
|
|
if search_param:
|
|
# import code; code.interact(local=dict(globals(), **locals()))
|
|
if search_param == 'in':
|
|
queryset = queryset.filter(Q(sender__in=[sender_id,recipent_id]),Q(recipent__in=[sender_id,recipent_id])).order_by('created')
|
|
return queryset
|
|
|
|
|
|
class MessageViewSet(ModelViewSet):
|
|
# queryset = Message.objects.all()
|
|
serializer_class = MessageSerializer
|
|
filter_class = MessageFilterSet
|
|
|
|
def get_queryset(self):
|
|
queryset = Message.objects.all()
|
|
search_param = self.request.query_params.get('operand', None)
|
|
recipent_id = self.request.query_params.get('recipent_id', None)
|
|
sender_id = self.request.query_params.get('sender_id', None)
|
|
if search_param:
|
|
# import code; code.interact(local=dict(globals(), **locals()))
|
|
if search_param == 'in':
|
|
queryset = queryset.filter(Q(sender__in=[sender_id,recipent_id]),Q(recipent__in=[sender_id,recipent_id])).\
|
|
filter(order__isnull=True).\
|
|
filter(~Q(sender=F('recipent')))
|
|
|
|
|
|
queryset = queryset.order_by('created')
|
|
return queryset
|
|
|
|
def filter_queryset(self, queryset):
|
|
queryset = super().filter_queryset(queryset)
|
|
qs = NewMessage.objects.filter(message__in=queryset, user=self.request.user).delete()
|
|
return queryset
|
|
|
|
|
|
class RealtyViewSet(ModelViewSet):
|
|
queryset = Realty.objects.all()
|
|
serializer_class = RealtySerializer
|
|
filter_class = RealtyFilterSet
|
|
|
|
|
|
class OrderViewSet(ModelViewSet):
|
|
queryset = Order.objects.all()
|
|
serializer_class = OrderSerializer
|
|
filter_class = OrderFilterSet
|
|
permission_classes = (permissions.IsAuthenticatedOrReadOnly,)
|
|
|
|
|
|
class SpecializationViewSet(ModelViewSet):
|
|
try: # TODO: dirty
|
|
queryset = Specialization.objects.root_nodes()[0].get_descendants()
|
|
except:
|
|
queryset = Specialization.objects.all()
|
|
serializer_class = SpecializationSerializer
|
|
filter_class = SpecializationFilterSet
|
|
|
|
|
|
class UserViewSet(ModelViewSet):
|
|
queryset = User.objects.all()
|
|
serializer_class = UserSerializer
|
|
filter_class = UserFilterSet
|
|
|
|
|
|
class LocationViewSet(ModelViewSet):
|
|
try: # TODO: dirty
|
|
queryset = Location.objects.root_nodes()[0].get_descendants()
|
|
except:
|
|
queryset = Location.objects.all()
|
|
serializer_class = LocationSerializer
|
|
filter_class = LocationFilterSet
|
|
|
|
|
|
class PortfolioPagination(PageNumberPagination):
|
|
page_size = settings.API_PAGE_SIZE # Default page size
|
|
page_size_query_param = 'page_size' # Provide custom page size through a query param
|
|
max_page_size = 1000
|
|
|
|
|
|
class PortfolioViewSet(ModelViewSet):
|
|
queryset = Portfolio.objects.all()
|
|
serializer_class = PortfolioSerializer
|
|
filter_class = PortfolioFilterSet
|
|
pagination_class = PortfolioPagination
|
|
|
|
|
|
class PortfolioPhotoViewSet(ModelViewSet):
|
|
queryset = PortfolioPhoto.objects.all()
|
|
serializer_class = PortfolioPhotoSerializer
|
|
filter_class = PortfolioPhotoFilterSet
|
|
|
|
|
|
|
|
|
|
class WorkSellPagination(PageNumberPagination):
|
|
page_size = settings.API_PAGE_SIZE # Default page size
|
|
page_size_query_param = 'page_size' # Provide custom page size through a query param
|
|
max_page_size = 1000
|
|
|
|
class WorkSellViewSet(ModelViewSet):
|
|
queryset = WorkSell.objects.all()
|
|
serializer_class = WorkSellSerializer
|
|
filter_class = WorkSellFilterSet
|
|
pagination_class = WorkSellPagination
|
|
|
|
|
|
|
|
class WorkSellPhotoViewSet(ModelViewSet):
|
|
queryset = WorkSellPhoto.objects.all()
|
|
serializer_class = WorkSellPhotoSerializer
|
|
filter_class = WorkSellPhotoFilterSet
|
|
|
|
|
|
|
|
|
|
class AnswerViewSet(ModelViewSet):
|
|
queryset = Answer.objects.all()
|
|
serializer_class = AnswerSerializer
|
|
filter_class = AnswerFilterSet
|
|
|
|
|
|
class TeamViewSet(ModelViewSet):
|
|
queryset = Team.objects.all()
|
|
serializer_class = TeamSerializer
|
|
filter_class = TeamFilterSet
|
|
|