before change Ticket Desc to TextArea
This commit is contained in:
1 parent
f7dbd02a6c
commit
ef18434b86
55 files changed
+1026
-59
No files matched your search
Whitespace-only changes.
@@ -0,0 +1,41 @@
|
||||
from apps.lead.models import Lead as LeadModel
|
||||
from apps.cuser.models import CuserRole as CuserRoleModel, RoleType as RoleTypeModel
|
||||
from rest_framework import serializers
|
||||
from django.db.models import Count
|
||||
from django.db.models import Count
|
||||
from rest_framework import exceptions
|
||||
|
||||
|
||||
def list_leads_api() -> LeadModel:
|
||||
|
||||
try:
|
||||
base_filter = {
|
||||
'sys_ws__uuid': 'ca918836-ddf2-4d88-8d76-033d285062e4',
|
||||
}
|
||||
|
||||
leads = LeadModel.objects.filter(**base_filter).order_by('-created_at')
|
||||
|
||||
return leads
|
||||
|
||||
except Exception as exp:
|
||||
message = f'Error Fetching List Leads: {exp}'
|
||||
raise exceptions.ValidationError({'error': message})
|
||||
|
||||
|
||||
|
||||
|
||||
def user_lead_report_count_by_date(start_datetime, end_datetime, status: str | None = None,):
|
||||
|
||||
base_filer = {
|
||||
'cuser_role__role_type__role_name_en': 'workspace_operator',
|
||||
'created_at__range': [start_datetime, end_datetime],
|
||||
}
|
||||
if status:
|
||||
base_filer['status'] = status
|
||||
|
||||
return LeadModel.objects.filter(**base_filer).values('cuser_role__name_family').annotate(
|
||||
count=Count('cuser_role__name_family')).order_by('-count')
|
||||
|
||||
|
||||
def operators_cuser_role():
|
||||
return CuserRoleModel.objects.filter(sys_ws_id=2, role_type__role_name_en='workspace_operator')
|
||||
@@ -0,0 +1 @@
|
||||
|
||||
@@ -0,0 +1,8 @@
|
||||
from django.urls import path
|
||||
from apps.report.views import ReportApiView, LeadListApi
|
||||
|
||||
|
||||
urlpatterns = [
|
||||
path('lead/', ReportApiView.as_view(), name='report-lead'),
|
||||
path('lead/list/loolegostar-x89i20/', LeadListApi.as_view(), name='report-lead'),
|
||||
]
|
||||
@@ -0,0 +1,115 @@
|
||||
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()
|
||||
Reference in new issue
Block a user