first
This commit is contained in:
commit
89a5d70512
284 files changed
+8364
No files matched your search
@@ -0,0 +1,318 @@
|
||||
from django.shortcuts import render
|
||||
from rest_framework.views import APIView
|
||||
from rest_framework.generics import ListAPIView
|
||||
from rest_framework.response import Response
|
||||
from rest_framework import serializers
|
||||
from apps.lead.serializers import LeadTypeSerializers, ProductTypeSerializers,\
|
||||
LeadSourceSerializers, LeadStepSerializers, ShahrSerializers
|
||||
from apps.lead.selectors import fields_new_lead_form
|
||||
from apps.lead.services import create_new_lead, update_lead, update_lead_status,\
|
||||
update_lead_comment, delete_lead_comment, create_lead_comment
|
||||
from apps.lead.models import Lead as LeadModel
|
||||
from rest_framework import status
|
||||
from apps.lead.selectors import list_leads, retrieve_lead, retrieve_summary_lead
|
||||
from rest_framework.permissions import IsAuthenticated
|
||||
from utils import custom_permissions
|
||||
from utils.tools import inline_serializer
|
||||
from utils.pagination import CustomPagination
|
||||
from django_filters.rest_framework import DjangoFilterBackend
|
||||
# Create your views here.
|
||||
|
||||
|
||||
class LeadFormItemsApi(APIView):
|
||||
|
||||
class OutputSerializer(serializers.Serializer):
|
||||
lead_types = LeadTypeSerializers(many=True)
|
||||
product_types = ProductTypeSerializers(many=True)
|
||||
lead_source = LeadSourceSerializers(many=True)
|
||||
lead_steps = LeadStepSerializers(many=True)
|
||||
shahr = ShahrSerializers(many=True)
|
||||
|
||||
def get(self, request):
|
||||
|
||||
fields_value = fields_new_lead_form(request)
|
||||
serializer = self.OutputSerializer(fields_value)
|
||||
|
||||
return Response(data=serializer.data)
|
||||
|
||||
|
||||
class LeadCreateApi(APIView):
|
||||
|
||||
class InputSerializer(serializers.Serializer):
|
||||
title = serializers.CharField(max_length=100, required=True)
|
||||
customer_id = serializers.IntegerField(required=True)
|
||||
desc = serializers.CharField(max_length=200, required=True)
|
||||
lead_type_id = serializers.IntegerField(required=True)
|
||||
product_type_id = serializers.IntegerField(required=True)
|
||||
lead_source_id = serializers.IntegerField(required=True)
|
||||
lead_step_id = serializers.IntegerField(required=True)
|
||||
city_id = serializers.IntegerField(required=True)
|
||||
|
||||
class OutputSerializer(serializers.Serializer):
|
||||
id = serializers.IntegerField(required=True)
|
||||
|
||||
def post(self, request):
|
||||
|
||||
serializer = self.InputSerializer(data=request.data)
|
||||
serializer.is_valid(raise_exception=True)
|
||||
|
||||
new_lead = create_new_lead(request=request, **serializer.validated_data)
|
||||
|
||||
output = self.OutputSerializer(new_lead)
|
||||
|
||||
return Response(data=output.data, status=status.HTTP_201_CREATED)
|
||||
|
||||
|
||||
class LeadUpdateApi(APIView):
|
||||
|
||||
class InputSerializer(serializers.Serializer):
|
||||
title = serializers.CharField(max_length=100, required=True)
|
||||
customer_id = serializers.IntegerField(required=True)
|
||||
desc = serializers.CharField(max_length=200, required=True)
|
||||
lead_type_id = serializers.IntegerField(required=True)
|
||||
product_type_id = serializers.IntegerField(required=True)
|
||||
lead_source_id = serializers.IntegerField(required=True)
|
||||
lead_step_id = serializers.IntegerField(required=True)
|
||||
city_id = serializers.IntegerField(required=True)
|
||||
|
||||
class OutputSerializer(serializers.Serializer):
|
||||
id = serializers.IntegerField(required=True)
|
||||
|
||||
def patch(self, request, lead_id):
|
||||
|
||||
serializer = self.InputSerializer(data=request.data)
|
||||
serializer.is_valid(raise_exception=True)
|
||||
|
||||
lead = update_lead(request=request, lead_id=lead_id, **serializer.validated_data)
|
||||
|
||||
output = self.OutputSerializer(lead)
|
||||
|
||||
return Response(data=output.data, status=status.HTTP_201_CREATED)
|
||||
|
||||
|
||||
class LeadUpdateStatusApi(APIView):
|
||||
|
||||
class InputSerializer(serializers.Serializer):
|
||||
status = serializers.CharField(max_length=2, required=True)
|
||||
|
||||
class OutputSerializer(serializers.Serializer):
|
||||
id = serializers.IntegerField(required=True)
|
||||
|
||||
def patch(self, request, lead_id):
|
||||
|
||||
serializer = self.InputSerializer(data=request.data)
|
||||
serializer.is_valid(raise_exception=True)
|
||||
|
||||
lead = update_lead_status(request=request, lead_id=lead_id, **serializer.validated_data)
|
||||
|
||||
output = self.OutputSerializer(lead)
|
||||
|
||||
return Response(data=output.data, status=status.HTTP_201_CREATED)
|
||||
|
||||
|
||||
class LeadListApi(ListAPIView):
|
||||
|
||||
permission_classes = (IsAuthenticated, custom_permissions.WorkspaceOperatorPermission)
|
||||
|
||||
class Pagination(CustomPagination):
|
||||
page_size = 10
|
||||
page_size_query_param = 'page_size'
|
||||
max_page_size = 20
|
||||
|
||||
class OutputSerializer(serializers.ModelSerializer):
|
||||
|
||||
customer = inline_serializer(many=False, fields={'name_family': serializers.CharField(), })
|
||||
|
||||
product_type = inline_serializer(many=False, fields={'name': serializers.CharField(), })
|
||||
|
||||
type = inline_serializer(many=False, fields={'title': serializers.CharField(), })
|
||||
|
||||
source = inline_serializer(many=False, fields={'title': serializers.CharField(), })
|
||||
|
||||
step = inline_serializer(many=False, fields={
|
||||
'id': serializers.IntegerField(),
|
||||
'name': serializers.CharField(),
|
||||
})
|
||||
|
||||
city = inline_serializer(many=False, fields={
|
||||
'name': serializers.CharField(),
|
||||
'ostan': inline_serializer(many=False, fields={'name': serializers.CharField() })
|
||||
})
|
||||
|
||||
class Meta:
|
||||
model = LeadModel
|
||||
fields = '__all__'
|
||||
|
||||
serializer_class = OutputSerializer
|
||||
pagination_class = Pagination
|
||||
|
||||
filter_backends = [DjangoFilterBackend]
|
||||
filterset_fields = ['step', 'status', ]
|
||||
|
||||
def get_queryset(self):
|
||||
return list_leads(request=self.request)
|
||||
|
||||
|
||||
class LeadRetrieveApi(APIView):
|
||||
|
||||
permission_classes = (IsAuthenticated, custom_permissions.WorkspaceOperatorPermission)
|
||||
|
||||
class OutputSerializer(serializers.ModelSerializer):
|
||||
|
||||
customer = inline_serializer(many=False, fields={
|
||||
'id': serializers.IntegerField(),
|
||||
'name_family': serializers.CharField(),
|
||||
})
|
||||
|
||||
product_type = inline_serializer(many=False, fields={
|
||||
'id': serializers.IntegerField(),
|
||||
'name': serializers.CharField(),
|
||||
})
|
||||
|
||||
type = inline_serializer(many=False, fields={
|
||||
'id': serializers.IntegerField(),
|
||||
'title': serializers.CharField(),
|
||||
})
|
||||
|
||||
source = inline_serializer(many=False, fields={
|
||||
'id': serializers.IntegerField(),
|
||||
'title': serializers.CharField(),
|
||||
})
|
||||
|
||||
step = inline_serializer(many=False, fields={
|
||||
'id': serializers.IntegerField(),
|
||||
'name': serializers.CharField(),
|
||||
})
|
||||
|
||||
city = inline_serializer(many=False, fields={
|
||||
'id': serializers.IntegerField(),
|
||||
'name': serializers.CharField(),
|
||||
'ostan': inline_serializer(many=False, fields={
|
||||
'id': serializers.IntegerField(),
|
||||
'name': serializers.CharField()
|
||||
})
|
||||
})
|
||||
|
||||
lead_comment = inline_serializer(many=True, fields={
|
||||
'id': serializers.IntegerField(),
|
||||
'created_at': serializers.DateTimeField(),
|
||||
'desc': serializers.CharField()
|
||||
})
|
||||
|
||||
lead_reminder = inline_serializer(many=False, fields={
|
||||
'id': serializers.IntegerField(),
|
||||
'created_at': serializers.DateTimeField(),
|
||||
'datetime': serializers.DateTimeField(),
|
||||
'desc': serializers.CharField()
|
||||
})
|
||||
|
||||
class Meta:
|
||||
model = LeadModel
|
||||
fields = '__all__'
|
||||
|
||||
serializer_class = OutputSerializer
|
||||
|
||||
def get(self, request, lead_id):
|
||||
|
||||
lead = retrieve_lead(request=request, id=lead_id)
|
||||
output = self.OutputSerializer(lead, many=False)
|
||||
|
||||
return Response(data=output.data)
|
||||
|
||||
|
||||
class LeadCommentCreateApi(APIView):
|
||||
|
||||
class InputSerializer(serializers.Serializer):
|
||||
desc = serializers.CharField(max_length=200, required=True)
|
||||
|
||||
class OutputSerializer(serializers.Serializer):
|
||||
id = serializers.IntegerField(required=True)
|
||||
|
||||
def post(self, request, lead_id):
|
||||
|
||||
serializer = self.InputSerializer(data=request.data)
|
||||
serializer.is_valid(raise_exception=True)
|
||||
|
||||
lead = create_lead_comment(request=request, lead_id=lead_id, **serializer.validated_data)
|
||||
|
||||
output = self.OutputSerializer(lead)
|
||||
|
||||
return Response(data=output.data, status=status.HTTP_200_OK)
|
||||
|
||||
|
||||
class LeadCommentUpdateApi(APIView):
|
||||
|
||||
class InputSerializer(serializers.Serializer):
|
||||
desc = serializers.CharField(max_length=200, required=True)
|
||||
|
||||
class OutputSerializer(serializers.Serializer):
|
||||
id = serializers.IntegerField(required=True)
|
||||
|
||||
def patch(self, request, lead_comment_id):
|
||||
|
||||
serializer = self.InputSerializer(data=request.data)
|
||||
serializer.is_valid(raise_exception=True)
|
||||
|
||||
lead = update_lead_comment(request=request, lead_comment_id=lead_comment_id, **serializer.validated_data)
|
||||
|
||||
output = self.OutputSerializer(lead)
|
||||
|
||||
return Response(data=output.data, status=status.HTTP_200_OK)
|
||||
|
||||
|
||||
class LeadCommentDeleteApi(APIView):
|
||||
|
||||
class OutputSerializer(serializers.Serializer):
|
||||
id = serializers.IntegerField(required=True)
|
||||
|
||||
def delete(self, request, lead_comment_id):
|
||||
|
||||
lead = delete_lead_comment(request=request, lead_comment_id=lead_comment_id)
|
||||
|
||||
output = self.OutputSerializer(lead)
|
||||
|
||||
return Response(data=output.data, status=status.HTTP_200_OK)
|
||||
|
||||
|
||||
class LeadSummaryApi(APIView):
|
||||
|
||||
permission_classes = (IsAuthenticated, custom_permissions.WorkspaceOperatorPermission)
|
||||
|
||||
class OutputSerializer(serializers.Serializer):
|
||||
|
||||
mozakere = inline_serializer(many=True, fields={
|
||||
'id': serializers.IntegerField(),
|
||||
'customer': inline_serializer(fields={
|
||||
'id': serializers.IntegerField(),
|
||||
'name_family': serializers.CharField(),
|
||||
}),
|
||||
'title': serializers.CharField(),
|
||||
'created_at': serializers.DateTimeField()
|
||||
})
|
||||
|
||||
pishfactor = inline_serializer(many=True, fields={
|
||||
'id': serializers.IntegerField(),
|
||||
'customer': inline_serializer(fields={
|
||||
'id': serializers.IntegerField(),
|
||||
'name_family': serializers.CharField(),
|
||||
}),
|
||||
'title': serializers.CharField(),
|
||||
'created_at': serializers.DateTimeField()
|
||||
})
|
||||
|
||||
kharid = inline_serializer(many=True, fields={
|
||||
'id': serializers.IntegerField(),
|
||||
'customer': inline_serializer(fields={
|
||||
'id': serializers.IntegerField(),
|
||||
'name_family': serializers.CharField(),
|
||||
}),
|
||||
'title': serializers.CharField(),
|
||||
'created_at': serializers.DateTimeField()
|
||||
})
|
||||
|
||||
def get(self, request):
|
||||
|
||||
leads = retrieve_summary_lead(request=request)
|
||||
output = self.OutputSerializer(leads, many=False)
|
||||
|
||||
return Response(data=output.data, status=status.HTTP_200_OK)
|
||||
Reference in new issue
Block a user