forked from erp-dev/erp
87 lines
3.2 KiB
Python
87 lines
3.2 KiB
Python
from rest_framework import serializers, status
|
|
from rest_framework.permissions import IsAuthenticated
|
|
from rest_framework.response import Response
|
|
from rest_framework.views import APIView
|
|
|
|
from basic_info import models as basic_models
|
|
|
|
|
|
class CustomerEmployeeBindingSerializer(serializers.Serializer):
|
|
"""客户员工绑定序列化器"""
|
|
customer_name = serializers.CharField(max_length=100, help_text='客户名称')
|
|
employee_name = serializers.CharField(max_length=100, help_text='员工姓名')
|
|
|
|
|
|
class CustomerEmployeeBindingView(APIView):
|
|
"""
|
|
客户员工可见性绑定 API
|
|
|
|
将指定员工添加到指定客户的可见员工列表中。
|
|
|
|
POST /api/v2/customers/bind-employee/
|
|
"""
|
|
|
|
permission_classes = [IsAuthenticated]
|
|
|
|
def post(self, request):
|
|
serializer = CustomerEmployeeBindingSerializer(data=request.data)
|
|
serializer.is_valid(raise_exception=True)
|
|
|
|
employee_name = serializer.validated_data['employee_name']
|
|
customer_name = serializer.validated_data['customer_name']
|
|
|
|
# 查询员工
|
|
employees = basic_models.Employee.objects.filter(name=employee_name)
|
|
if employees.count() == 0:
|
|
return Response(
|
|
{'error': f'未找到名为 "{employee_name}" 的员工'},
|
|
status=status.HTTP_400_BAD_REQUEST
|
|
)
|
|
if employees.count() > 1:
|
|
return Response(
|
|
{'error': f'找到多个名为 "{employee_name}" 的员工({employees.count()} 个),请使用更精确的标识'},
|
|
status=status.HTTP_403_FORBIDDEN
|
|
)
|
|
|
|
# 查询客户
|
|
customers = basic_models.Customer.objects.filter(name=customer_name)
|
|
if customers.count() == 0:
|
|
return Response(
|
|
{'error': f'未找到名为 "{customer_name}" 的客户'},
|
|
status=status.HTTP_400_BAD_REQUEST
|
|
)
|
|
if customers.count() > 1:
|
|
return Response(
|
|
{'error': f'找到多个名为 "{customer_name}" 的客户({customers.count()} 个),请使用更精确的标识'},
|
|
status=status.HTTP_403_FORBIDDEN
|
|
)
|
|
|
|
# 建立绑定关系
|
|
employee = employees.first()
|
|
customer = customers.first()
|
|
|
|
# 检查是否已经绑定
|
|
if customer.visible_employees.filter(id=employee.id).exists():
|
|
return Response(
|
|
{
|
|
'message': f'员工 "{employee_name}" 已在客户 "{customer_name}" 的可见列表中',
|
|
'customer_id': customer.id,
|
|
'employee_id': employee.id,
|
|
},
|
|
status=status.HTTP_200_OK
|
|
)
|
|
|
|
# 添加绑定
|
|
customer.visible_employees.add(employee)
|
|
|
|
return Response(
|
|
{
|
|
'message': f'成功将员工 "{employee_name}" 添加到客户 "{customer_name}" 的可见列表',
|
|
'customer_id': customer.id,
|
|
'customer_name': customer.name,
|
|
'employee_id': employee.id,
|
|
'employee_name': employee.name,
|
|
},
|
|
status=status.HTTP_201_CREATED
|
|
)
|