1
0
forked from erp-dev/erp

feat: bind employee to customer (v2)

This commit is contained in:
2025-12-25 20:38:17 +08:00
parent a293b1ca84
commit 147b5804d2
3 changed files with 193 additions and 0 deletions

View File

@@ -0,0 +1,86 @@
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
)