优化案件模块

This commit is contained in:
27942
2026-01-20 11:29:54 +08:00
parent 61d1b6a27a
commit 6f1566044e

View File

@@ -602,20 +602,78 @@ class issueAnInvoice(APIView):
}, status=status.HTTP_400_BAD_REQUEST)
# 处理合同号和负责人:优先从案件表同步
from business.models import ProjectRegistration
from business.models import ProjectRegistration, Case
import json
if case_id:
# 如果提供了案件ID从案件表获取合同号和负责人
# 如果提供了案件ID优先从Case案件管理表查找如果找不到再从ProjectRegistration立项登记表查找
ContractNo = None
personincharge = None
responsiblefor = None
# 转换case_id为整数如果可能
try:
case = ProjectRegistration.objects.get(id=case_id, is_deleted=False)
ContractNo = case.ContractNo # 自动同步合同号
personincharge = case.responsiblefor # 自动同步负责人
except ProjectRegistration.DoesNotExist:
case_id_int = int(case_id)
except (ValueError, TypeError):
case_id_int = case_id
# 优先从Case案件管理中查找
try:
case = Case.objects.select_related('project').get(id=case_id_int, is_deleted=False)
ContractNo = case.contract_no # 自动同步合同号
responsiblefor = case.responsiblefor # 获取负责人信息
# 如果案件信息不完整从关联的ProjectRegistration获取
if case.project:
project = case.project
ContractNo = ContractNo or project.ContractNo
responsiblefor = responsiblefor or project.responsiblefor
except Case.DoesNotExist:
# 如果Case中找不到尝试从ProjectRegistration立项登记中查找
try:
project = ProjectRegistration.objects.get(id=case_id_int, is_deleted=False)
ContractNo = project.ContractNo # 自动同步合同号
responsiblefor = project.responsiblefor # 获取负责人信息
except ProjectRegistration.DoesNotExist:
# 提供更详细的错误信息
return Response({
'status': 'error',
'message': f'案件不存在或已被删除ID: {case_id}已尝试在Case表和ProjectRegistration表中查找',
'code': 1
}, status=status.HTTP_404_NOT_FOUND)
# 解析负责人信息提取负责人姓名Invoice模型的personincharge字段是CharField需要字符串
if responsiblefor:
try:
if isinstance(responsiblefor, str):
responsiblefor_dict = json.loads(responsiblefor)
else:
responsiblefor_dict = responsiblefor
personincharge = responsiblefor_dict.get('responsible_person', '')
if not personincharge:
personincharge = str(responsiblefor) if responsiblefor else ''
except (json.JSONDecodeError, TypeError, AttributeError):
personincharge = str(responsiblefor) if responsiblefor else ''
# 确保不超过100字符Invoice模型限制
if personincharge and len(str(personincharge)) > 100:
personincharge = str(personincharge)[:100]
# 验证是否成功获取到合同号和负责人
if not ContractNo:
return Response({
'status': 'error',
'message': '案件不存在或已被删除',
'message': '无法从案件中获取合同号,请检查案件信息',
'code': 1
}, status=status.HTTP_404_NOT_FOUND)
}, status=status.HTTP_400_BAD_REQUEST)
if not personincharge:
return Response({
'status': 'error',
'message': '无法从案件中获取负责人信息,请检查案件信息或手动填写负责人',
'code': 1
}, status=status.HTTP_400_BAD_REQUEST)
else:
# 如果没有提供案件ID则ContractNo和personincharge必须手动提供
if not ContractNo: