116 lines
4.1 KiB
Python
116 lines
4.1 KiB
Python
from django_filters.rest_framework import DjangoFilterBackend
|
|
from rest_framework import serializers
|
|
from rest_framework.generics import ListAPIView
|
|
from rest_framework.views import APIView
|
|
from apps.lead.models import Lead as LeadModel
|
|
from rest_framework.response import Response
|
|
from rest_framework import status
|
|
from apps.report.selector import user_lead_report_count_by_date
|
|
from apps.cuser.models import CuserRole as CuserRoleModel
|
|
from datetime import datetime
|
|
from apps.report.selector import list_leads_api
|
|
from utils.pagination import CustomPagination
|
|
from utils.tools import inline_serializer
|
|
|
|
|
|
class ReportApiView(APIView):
|
|
|
|
class ResultSerializer(serializers.Serializer):
|
|
|
|
class OperatorSerializer(serializers.Serializer):
|
|
cuser_role__name_family = serializers.CharField()
|
|
count = serializers.IntegerField()
|
|
|
|
su = OperatorSerializer(many=True)
|
|
un = OperatorSerializer(many=True)
|
|
fa = OperatorSerializer(many=True)
|
|
all = OperatorSerializer(many=True)
|
|
|
|
def get(self, request):
|
|
date_format = "%Y-%m-%d"
|
|
start_datetime = request.query_params.get('start_datetime', None)
|
|
if start_datetime:
|
|
start_datetime = start_datetime.replace(" ", "")
|
|
|
|
end_datetime = request.query_params.get('end_datetime', None)
|
|
if end_datetime:
|
|
end_datetime = end_datetime.replace(" ", "")
|
|
|
|
#example start_datetime : 2024-03-20T14:31:16 03:30
|
|
if start_datetime and end_datetime:
|
|
start_dt = datetime.strptime(start_datetime, date_format)
|
|
end_dt = datetime.strptime(end_datetime, date_format)
|
|
else:
|
|
start_dt = datetime.now()
|
|
end_dt = datetime.now()
|
|
|
|
# status = request.query_params.get('status')
|
|
|
|
#همه
|
|
users_all_lead_count = user_lead_report_count_by_date(start_datetime=start_dt, end_datetime=end_dt)
|
|
#موفق
|
|
users_su_lead_count = user_lead_report_count_by_date(status='SU', start_datetime=start_dt, end_datetime=end_dt)
|
|
#شکست
|
|
users_fa_lead_count = user_lead_report_count_by_date(status='FA', start_datetime=start_dt, end_datetime=end_dt)
|
|
#نا معلوم
|
|
users_un_lead_count = user_lead_report_count_by_date(status='UN', start_datetime=start_dt, end_datetime=end_dt)
|
|
|
|
result = {
|
|
'su': users_su_lead_count,
|
|
'fa': users_fa_lead_count,
|
|
'un': users_un_lead_count,
|
|
'all': users_all_lead_count,
|
|
}
|
|
|
|
output_serializer = self.ResultSerializer(result)
|
|
|
|
return Response(output_serializer.data)
|
|
|
|
|
|
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() })
|
|
})
|
|
|
|
cuser_role = inline_serializer(many=False, fields={
|
|
'id': serializers.IntegerField(),
|
|
'name_family': 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_api()
|