优化案件模块
This commit is contained in:
@@ -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:
|
||||
|
||||
Reference in New Issue
Block a user