This commit is contained in:
javad committed 2024-01-22 13:01:42 +03:30
commit 89a5d70512
284 files changed
+8364

No files matched your search

+9
View File
@@ -0,0 +1,9 @@
from .responsible_group import ResponsibleGroupCreateApi, ResponsibleGroupDeleteApi,\
ResponsibleGroupRetrieveApi, ResponsibleGroupListApi
from .shive_ashenaei import ShiveAshenaeiCreateApi, ShiveAshenaeiDeleteApi, ShiveAshenaeiListApi, ShiveAshenaeiRetrieveApi
from .customer import *
from .form_item import *
from .customer_summary import *
from .customer_note import *
+226
View File
@@ -0,0 +1,226 @@
from rest_framework.views import APIView
from rest_framework import serializers
from apps.customer.models import Customer as CustomerModel
from apps.customer.selectors import retrieve_customer, list_customer, list_customer_v2
from utils.get_user_workspace import get_user_workspace_uuid, get_user_workspace
from rest_framework.response import Response
from rest_framework import status
from rest_framework.permissions import IsAuthenticated
from utils import custom_permissions
from rest_framework import generics
from apps.customer.services import create_customer, update_customer, delete_customer, create_customer_v2
from apps.workspace.models import City as CityModel
from utils.tools import inline_model_serializer, inline_serializer
from utils.pagination import CustomPagination
from django_filters import rest_framework as filters
class CustomerRetrieveApi(APIView):
permission_classes = (IsAuthenticated, custom_permissions.WorkspaceOperatorPermission)
class OutputSerializer(serializers.ModelSerializer):
class Meta:
model = CustomerModel
fields = '__all__'
def get(self, request, customer_id: int):
user_workspace_uuid = get_user_workspace_uuid(request=request)
customer_obj = retrieve_customer(customer_id=customer_id, workspace_uuid=user_workspace_uuid)
output = self.OutputSerializer(customer_obj)
return Response(data=output.data, status=status.HTTP_200_OK)
class CustomerListApi(generics.ListAPIView):
permission_classes = (IsAuthenticated, custom_permissions.WorkspaceOperatorPermission)
class OutputSerializer(serializers.ModelSerializer):
class CitySerializer(serializers.ModelSerializer):
class OstanSerializer(serializers.ModelSerializer):
class Meta:
model = CityModel
fields = '__all__'
ostan = OstanSerializer()
class Meta:
model = CityModel
fields = '__all__'
city = CitySerializer()
class Meta:
model = CustomerModel
fields = '__all__'
serializer_class = OutputSerializer
def get_queryset(self):
user_workspace_uuid = get_user_workspace_uuid(request=self.request)
name_family = self.request.query_params.get('name_family')
mobile = self.request.query_params.get('mobile')
customer_objs = list_customer(workspace_uuid=user_workspace_uuid, name_family=name_family, mobile=mobile)
return customer_objs
class CustomerCreateApi(APIView):
permission_classes = (IsAuthenticated, custom_permissions.WorkspaceOperatorPermission)
class InputSerializer(serializers.ModelSerializer):
class Meta:
model = CustomerModel
fields = '__all__'
read_only_fields = ['sys_ws', '']
class OutputSerializer(serializers.ModelSerializer):
class Meta:
model = CustomerModel
exclude = ('sys_ws', )
def post(self, request):
serializer = self.InputSerializer(data=request.data)
serializer.is_valid(raise_exception=True)
user_workspace = get_user_workspace(request=request)
customer_obj = create_customer(**serializer.validated_data, workspace=user_workspace)
output = self.OutputSerializer(customer_obj)
return Response(data=output.data, status=status.HTTP_201_CREATED)
class CustomerUpdateApi(APIView):
permission_classes = (IsAuthenticated, custom_permissions.WorkspaceOperatorPermission)
class InputSerializer(serializers.ModelSerializer):
class Meta:
model = CustomerModel
fields = '__all__'
read_only_fields = ['sys_ws', '']
class OutputSerializer(serializers.ModelSerializer):
class Meta:
model = CustomerModel
exclude = ('sys_ws', )
def patch(self, request, customer_id: int):
serializer = self.InputSerializer(data=request.data)
serializer.is_valid(raise_exception=True)
user_workspace_uuid = get_user_workspace_uuid(request=request)
customer_obj = update_customer(**serializer.validated_data, customer_id=customer_id, workspace_uuid=user_workspace_uuid)
output = self.OutputSerializer(customer_obj)
return Response(data=output.data, status=status.HTTP_200_OK)
class CustomerDeleteApi(APIView):
permission_classes = (IsAuthenticated, custom_permissions.WorkspaceOperatorPermission)
class OutputSerializer(serializers.ModelSerializer):
class Meta:
model = CustomerModel
exclude = ('sys_ws', )
def delete(self, request, customer_id: int):
user_workspace_uuid = get_user_workspace_uuid(request=request)
delete_customer(customer_id=customer_id, workspace_uuid=user_workspace_uuid)
return Response(status=status.HTTP_200_OK)
class CustomerListApiV2(generics.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):
city = inline_serializer(fields={
'id': serializers.IntegerField(),
'name': serializers.CharField(),
'ostan': inline_serializer(many=False, fields={
'id': serializers.IntegerField(),
'name': serializers.CharField()
})
})
shive_ashenaei = inline_serializer(fields={
'id': serializers.IntegerField(),
'name': serializers.CharField(),
})
responsible_group = inline_serializer(fields={
'id': serializers.IntegerField(),
'name': serializers.CharField(),
})
class Meta:
model = CustomerModel
fields = '__all__'
class CustomerFilter(filters.FilterSet):
class Meta:
model = CustomerModel
fields = {
'name_family': ['exact', 'contains'],
'mobile': ['exact', 'contains'],
}
serializer_class = OutputSerializer
pagination_class = Pagination
filter_backends = [filters.DjangoFilterBackend, ]
filterset_class = CustomerFilter
def get_queryset(self):
customer_objs = list_customer_v2(request=self.request)
return customer_objs
class CustomerCreateApiV2(APIView):
permission_classes = (IsAuthenticated, custom_permissions.WorkspaceOperatorPermission)
class InputSerializer(serializers.Serializer):
name_family = serializers.CharField(max_length=25, required=True)
mobile = serializers.IntegerField(required=True)
phone = serializers.IntegerField(required=True)
address = serializers.CharField(max_length=300, required=True)
city = serializers.IntegerField(required=True)
shive_ashenaei = serializers.IntegerField(required=True)
responsible_group = serializers.IntegerField(required=True)
def post(self, request):
serializer = self.InputSerializer(data=request.data)
serializer.is_valid(raise_exception=True)
customer = create_customer_v2(request=request, **serializer.validated_data)
return Response(data={'id': customer.id}, status=status.HTTP_201_CREATED)
+94
View File
@@ -0,0 +1,94 @@
from rest_framework.views import APIView
from rest_framework import serializers
from rest_framework.response import Response
from rest_framework import status
from apps.customer.services import create_customer_note, customer_note_edit, customer_note_delete
from apps.customer.selectors import customer_note_retrieve, customer_note_list
from apps.customer.models import CustomerNote as CustomerNoteModel
from apps.reminder.models import Reminder as ReminderModel
from utils.tools import inline_serializer
class CustomerCreateNoteApi(APIView):
class InputSerializer(serializers.Serializer):
desc = serializers.CharField()
reminder_datetime = serializers.DateTimeField(required=False, allow_null=True)
reminder_desc = serializers.CharField(required=False, allow_null=True, max_length=200)
def post(self, request, customer_id):
serializer = self.InputSerializer(data=request.data)
serializer.is_valid(raise_exception=True)
output = create_customer_note(request=request, customer_id=customer_id, **serializer.validated_data)
return Response(data={'id': output.id}, status=status.HTTP_201_CREATED)
class CustomerListNoteApi(APIView):
class OutputSerializer(serializers.ModelSerializer):
class Meta:
model = CustomerNoteModel
exclude = ['cuser_role', 'sys_ws']
def get(self, request, customer_id):
notes = customer_note_list(request=request, customer_id=customer_id)
output = self.OutputSerializer(notes, many=True)
return Response(data=output.data, status=status.HTTP_200_OK)
class CustomerRetrieveNoteApi(APIView):
class OutputSerializer(serializers.Serializer):
class CustomerNoteSerializer(serializers.ModelSerializer):
class Meta:
model = CustomerNoteModel
fields = '__all__'
class CustomerNoteReminderSerializer(serializers.ModelSerializer):
class Meta:
model = ReminderModel
fields = '__all__'
customer_note = CustomerNoteSerializer(many=False, required=True)
customer_note_reminder = CustomerNoteReminderSerializer(many=False, required=False)
def get(self, request, customer_id, note_id):
note = customer_note_retrieve(request=request, customer_id=customer_id, note_id=note_id)
output = self.OutputSerializer(note)
return Response(data=output.data, status=status.HTTP_200_OK)
class CustomerEditNoteApi(APIView):
class InputSerializer(serializers.Serializer):
desc = serializers.CharField(required=True)
reminder_datetime = serializers.DateTimeField(required=False, allow_null=True)
reminder_desc = serializers.CharField(required=False, allow_null=True, max_length=200)
class OutputSerializer(serializers.ModelSerializer):
class Meta:
model = CustomerNoteModel
fields = '__all__'
def patch(self, request, customer_id, note_id):
serializer = self.InputSerializer(data=request.data)
serializer.is_valid(raise_exception=True)
note = customer_note_edit(request=request, customer_id=customer_id, note_id=note_id, **serializer.validated_data)
return Response(data={'id': note.id}, status=status.HTTP_201_CREATED)
class CustomerDeleteNoteApi(APIView):
def delete(self, request, customer_id, note_id):
note = customer_note_delete(request=request, customer_id=customer_id, note_id=note_id)
return Response(data={'result': 'deleted'}, status=status.HTTP_200_OK)
+30
View File
@@ -0,0 +1,30 @@
from rest_framework import serializers
from rest_framework.response import Response
from rest_framework.views import APIView
from apps.customer.models import Customer as CustomerModel
from rest_framework import status
from apps.customer.selectors import customer_summery
from utils.tools import inline_serializer
class CustomerSummary(APIView):
class OutputSerializer(serializers.Serializer):
customer_notes = inline_serializer(many=True, fields={
'id': serializers.IntegerField(required=True),
'created_at': serializers.DateTimeField(required=True),
'desc': serializers.CharField(required=True)
})
customer_leads = inline_serializer(many=True, fields={
'id': serializers.IntegerField(required=True),
'title': serializers.CharField(required=True),
'created_at': serializers.DateTimeField(required=True),
})
def get(self, request, customer_id):
summery = customer_summery(request=request, customer_id=customer_id)
output = self.OutputSerializer(summery)
return Response(data=output.data, status=status.HTTP_200_OK)
+42
View File
@@ -0,0 +1,42 @@
from rest_framework.views import APIView
from apps.customer.models import ShiveAshenaei as ShiveAshenaeiModel
from apps.workspace.models import City as CityModel
from rest_framework import serializers
from utils.tools import inline_serializer
from rest_framework import status
from apps.customer.selectors import customer_form_item
from rest_framework.response import Response
from rest_framework.permissions import IsAuthenticated
from utils import custom_permissions
class CustomerFormItemApi(APIView):
permission_classes = (IsAuthenticated, custom_permissions.WorkspaceOperatorPermission)
class OutputSerializer(serializers.Serializer):
shive_ashenaei = inline_serializer(many=True, fields={
'id': serializers.IntegerField(),
'name': serializers.CharField()
})
shahr = inline_serializer(many=True, fields={
'id': serializers.IntegerField(),
'name': serializers.CharField(),
'ostan': inline_serializer(fields={'id': serializers.IntegerField(), }),
'is_ostan': serializers.BooleanField(),
})
responsible_groups = inline_serializer(many=True, fields={
'id': serializers.IntegerField(),
'name': serializers.CharField()
})
def get(self, request):
fields_value = customer_form_item(request)
serializer = self.OutputSerializer(fields_value)
return Response(data=serializer.data, status=status.HTTP_200_OK)
+81
View File
@@ -0,0 +1,81 @@
from rest_framework.views import APIView
from rest_framework import generics
from rest_framework import serializers
from rest_framework.response import Response
from apps.customer.services import create_responsible_group, delete_responsible_group
from apps.customer.selectors import retrieve_responsible_group, list_responsible_group
from utils.get_user_workspace import get_user_workspace_uuid, get_user_workspace
from rest_framework import status
from utils import custom_permissions
from apps.customer.models import ResponsibleGroup
from rest_framework.permissions import IsAuthenticated
class ResponsibleGroupRetrieveApi(APIView):
permission_classes = (IsAuthenticated, custom_permissions.WorkspaceOperatorPermission, )
class OutputSerializer(serializers.ModelSerializer):
class Meta:
model = ResponsibleGroup
fields = '__all__'
def get(self, request, responsible_group_id: int):
user_workspace_uuid = get_user_workspace_uuid(request)
responsible_group_obj = retrieve_responsible_group(responsible_group_id=responsible_group_id, workspace_uuid=user_workspace_uuid)
output = self.OutputSerializer(responsible_group_obj)
return Response(data=output.data, status=status.HTTP_200_OK)
class ResponsibleGroupListApi(generics.ListAPIView):
permission_classes = (IsAuthenticated, custom_permissions.WorkspaceOperatorPermission, )
class OutputSerializer(serializers.ModelSerializer):
class Meta:
model = ResponsibleGroup
fields = '__all__'
serializer_class = OutputSerializer
def get_queryset(self):
user_workspace_uuid = get_user_workspace_uuid(self.request)
return list_responsible_group(workspace_uuid=user_workspace_uuid)
class ResponsibleGroupCreateApi(APIView):
permission_classes = (IsAuthenticated, custom_permissions.WorkspaceAdminPermission,)
class InputSerializer(serializers.Serializer):
name = serializers.CharField(max_length=20)
class OutputSerializer(serializers.Serializer):
name = serializers.CharField(max_length=20)
def post(self, request):
serializer = self.InputSerializer(data=request.data)
serializer.is_valid(raise_exception=True)
group_name = serializer.validated_data.get
user_workspace = get_user_workspace(request=request)
responsible_group_obj = create_responsible_group(name=group_name, workspace=user_workspace)
output = self.OutputSerializer(responsible_group_obj)
return Response(data=output.data, status=status.HTTP_201_CREATED)
class ResponsibleGroupDeleteApi(APIView):
permission_classes = (IsAuthenticated, custom_permissions.WorkspaceAdminPermission,)
def delete(self, request, responsible_group_id: int):
user_workspace_uuid = get_user_workspace_uuid(request)
delete_responsible_group(responsible_group_id=responsible_group_id, workspace_uuid=user_workspace_uuid)
return Response(status=status.HTTP_200_OK)
+73
View File
@@ -0,0 +1,73 @@
from apps.customer.models import ShiveAshenaei as ShiveAshenaeiModel
from rest_framework.views import APIView
from rest_framework import generics
from utils.get_user_workspace import get_user_workspace_uuid, get_user_workspace
from utils import custom_permissions
from rest_framework.permissions import IsAuthenticated
from rest_framework import serializers
from apps.customer.services import create_shive_ashenaei, delete_shive_ashenaei
from apps.customer.selectors import list_shive_ashenaei, retrieve_shive_ashenaei
from rest_framework.response import Response
from rest_framework import status
class ShiveAshenaeiCreateApi(APIView):
permission_classes = (IsAuthenticated, custom_permissions.WorkspaceAdminPermission)
class InputSerializer(serializers.Serializer):
name = serializers.CharField(max_length=20)
def post(self, request):
serializer = self.InputSerializer(data=request.data)
serializer.is_valid(raise_exception=True)
user_workspace = get_user_workspace(request=request)
name = serializer.validated_data.get
create_shive_ashenaei(name=name, workspace=user_workspace)
return Response(status=status.HTTP_201_CREATED)
class ShiveAshenaeiDeleteApi(APIView):
permission_classes = (IsAuthenticated, custom_permissions.WorkspaceAdminPermission)
def delete(self, request, shive_id: int):
user_workspace_uuid = get_user_workspace_uuid(request=request)
delete_shive_ashenaei(shive_id=shive_id, workspace_uuid=user_workspace_uuid)
return Response(status=status.HTTP_200_OK)
class ShiveAshenaeiRetrieveApi(APIView):
permission_classes = (IsAuthenticated, custom_permissions.WorkspaceOperatorPermission, )
class OutputSerializer(serializers.ModelSerializer):
class Meta:
model = ShiveAshenaeiModel
fields = '__all__'
def get(self, request, shive_id: int):
user_workspace_uuid = get_user_workspace_uuid(request)
responsible_group_obj = retrieve_shive_ashenaei(shive_id=shive_id, workspace_uuid=user_workspace_uuid)
output = self.OutputSerializer(responsible_group_obj)
return Response(data=output.data, status=status.HTTP_200_OK)
class ShiveAshenaeiListApi(generics.ListAPIView):
permission_classes = (IsAuthenticated, custom_permissions.WorkspaceOperatorPermission)
class OutputSerializer(serializers.ModelSerializer):
class Meta:
model = ShiveAshenaeiModel
fields = '__all__'
serializer_class = OutputSerializer
def get_queryset(self):
user_workspace_uuid = get_user_workspace_uuid(self.request)
return list_shive_ashenaei(workspace_uuid=user_workspace_uuid)