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.
 
 
 
 
 
 

232 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 chat.filters import MessageFilterSet, NoteFilterSet, DocumentFilterSet
from chat.models import Message, Notes, Documents, NewMessage
from chat.serializers import MessageSerializer, NoteSerializer, DocumentsSerializer
from common.filters import LocationFilterSet
from common.models import Location
from common.serializers import LocationSerializer
from projects.filters import (
ProjectFilterSet, RealtyFilterSet, StageFilterSet, PortfolioFilterSet, OrderFilterSet,
PortfolioPhotoFilterSet, AnswerFilterSet,
)
from projects.models import Project, Realty, Stage, Portfolio, PortfolioPhoto, Answer, Order
from projects.serializers import (
ProjectSerializer, RealtySerializer, StageSerializer, PortfolioSerializer,
PortfolioPhotoSerializer, AnswerSerializer, OrderSerializer, )
from reviews.filters import ReviewFilterSet
from reviews.models import Review
from reviews.serializers import ReviewSerializer
from specializations.filters import SpecializationFilterSet
from specializations.models import Specialization
from specializations.serializers import SpecializationSerializer
from users.filters import UserFilterSet, TeamFilterSet
from users.models import User, ContractorResumeFiles, ContractorResume, Team
from users.serializers import UserSerializer, ContractorResumeFilesSerializer, ContractorResumeSerializer, \
TeamSerializer
from work_sell.filters import WorkSellFilterSet, WorkSellPhotoFilterSet
from work_sell.models import WorkSell, WorkSellPhoto
from work_sell.serializers import WorkSellSerializer, WorkSellPhotoSerializer
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