views_part_api.py 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170
  1. from django.http import HttpResponse, JsonResponse, QueryDict
  2. from django.views.decorators.csrf import csrf_exempt
  3. from django.forms import model_to_dict
  4. from .model_handler import PartAttachmentHandler, PartHandler, VendorHandler, EcnHandler, BOMsettingHandler
  5. from .models import PartAttachment, VendorAttachment
  6. from Info.model_handler import CompanyHandler, UserHandler
  7. from Info.func import file_upload, get_file
  8. from .func import part_info
  9. def pn_check(request):
  10. company = CompanyHandler.get_by_id(request.session.get('company_id'))
  11. result = {'code': 1, 'content': None}
  12. if request.method == 'GET':
  13. part = PartHandler.exist_pn(request.GET.get('part_number'), company)
  14. if part:
  15. result = {'code': 1, 'content': "这个料号已经使用了。"}
  16. else:
  17. result = {'code': 0, 'content': None}
  18. return JsonResponse(result)
  19. @csrf_exempt
  20. def file(request):
  21. result = {'code': 1, 'content': None}
  22. company = CompanyHandler.get_by_id(request.session.get('company_id'))
  23. user = UserHandler.get_by_id(request.session.get('user_id'))
  24. if request.method == 'GET':
  25. return get_file(request)
  26. if request.method == 'POST':
  27. upload_result = file_upload(request, ['BOM', 'part'])
  28. if upload_result['code'] == 0:
  29. p_attachment = PartAttachment()
  30. p_attachment.company = company
  31. p_attachment.creator = user
  32. p_attachment.display_name = upload_result['target_file_name']
  33. p_attachment.url = upload_result['target_file_path'] + \
  34. upload_result['target_file_name']
  35. p_attachment.save()
  36. content = {'id': p_attachment.id, 'url': p_attachment.url,
  37. 'display_name': p_attachment.display_name}
  38. result['code'] = 0
  39. result['content'] = content
  40. else:
  41. result['content'] = '上传失败'
  42. return JsonResponse(result)
  43. if request.method == 'DELETE':
  44. post_data = eval(request.body)
  45. if PartAttachmentHandler.del_by_id(post_data['delete_attachment_id']):
  46. result = {'code': 0, 'content': None}
  47. else:
  48. result = {'code': 1, 'content': '删除失败'}
  49. return JsonResponse(result)
  50. def search_part_number(request):
  51. if request.method == 'GET':
  52. result = {'code': 1, 'content': None, 'msg': None}
  53. company = CompanyHandler.get_by_id(request.session.get('company_id'))
  54. part_number_keyword = request.GET.get('part_number')
  55. parts = PartHandler.search_like_pn(part_number_keyword, company)
  56. part_list = []
  57. for p in parts:
  58. part_list.append(model_to_dict(p))
  59. result['code'] = 0
  60. result['content'] = part_list
  61. return JsonResponse(result)
  62. def get_draft_part(request): # 读取draft状态下的part数据
  63. if request.method == 'GET':
  64. result = {'code': 1, 'content': None, 'msg': None}
  65. company = CompanyHandler.get_by_id(request.session.get('company_id'))
  66. part = PartHandler.get_by_id(request.GET.get('edit_id'))
  67. if part.company != company: # 校验part归属问题
  68. result = {'code': 1, 'content': None,
  69. 'msg': 'part is not for this company'}
  70. return JsonResponse(result)
  71. if part:
  72. # part_attachments = PartAttachmentHandler.search_by_part(part)
  73. # attachment_list = []
  74. # for p_a in part_attachments:
  75. # attachment = {'id':p_a.id , 'url': p_a.url, 'display_name': p_a.display_name}
  76. # attachment_list.append(attachment)
  77. # part_dict = model_to_dict(part)
  78. # part_dict['sub_parts'] = eval(part_dict['sub_parts'])
  79. # part_dict['attachment'] = attachment_list
  80. # vendor_detail = {}
  81. # if part.vendor:
  82. # vendor_detail = {
  83. # 'id': part.vendor.id,
  84. # 'code': part.vendor.code,
  85. # 'name': part.vendor.name,
  86. # }
  87. # part_dict['vendor_detail'] = vendor_detail
  88. part_dict = part_info(part)
  89. result = {'code': 0, 'content': part_dict, 'msg': 'success'}
  90. return JsonResponse(result)
  91. def ecn_part_detail(request): # 读取ECN具体签核料号的信息
  92. if request.method == 'GET':
  93. result = {'code': 1, 'content': None, 'msg': None}
  94. ECN_id = request.GET.get('ecn_id')
  95. if ECN_id:
  96. ecn = EcnHandler.get_by_id(ECN_id)
  97. company = CompanyHandler.get_by_id(
  98. request.session.get('company_id'))
  99. if ecn.target_part.company != company: # 校验part归属问题
  100. result = {'code': 1, 'content': None,
  101. 'msg': 'part is not for this company'}
  102. return JsonResponse(result)
  103. content = {
  104. 'ecn_id': ecn.id,
  105. 'part': part_info(ecn.target_part)
  106. }
  107. result['content'] = content
  108. result['code'] = 0
  109. else:
  110. result['msg'] = 'ECN没有找到'
  111. return JsonResponse(result)
  112. @csrf_exempt
  113. def part_EOL(request):
  114. user = UserHandler.get_by_id(request.session.get('user_id'))
  115. company = CompanyHandler.get_by_id(request.session.get('company_id'))
  116. result = {'code': 1, 'content': None, 'msg': None}
  117. if request.method == 'POST':
  118. post_data = eval(request.body)
  119. EOL_pn = post_data['EOL_pn']
  120. part = PartHandler.get_by_pn(EOL_pn, company)
  121. all_ver_parts = PartHandler.all_ver_by_pn(EOL_pn, company)
  122. if user == part.owner:
  123. # 停用released料号
  124. part.life_cycle = 'EOL'
  125. part.save()
  126. # 删除签核中和草稿中的料号
  127. for p in all_ver_parts:
  128. if p.life_cycle in ['draft', 'sign-off']:
  129. p.delete()
  130. result['msg'] = '料号{}停用成功'.format(EOL_pn)
  131. result['code'] = 0
  132. # 会直接删除料号相关的,签核中的ECN。关系是on_delete.cascade
  133. # 会直接删除料号相关签核中的签核。关系是on_delete.cascade
  134. else:
  135. result['msg'] = '料号停用失败'
  136. result['content'] = '非料号用户本人'
  137. return JsonResponse(result)
  138. def attachment_maxsize(request): # 获取BOM附件大小限制
  139. # user = UserHandler.get_by_id(request.session.get('user_id'))
  140. company = CompanyHandler.get_by_id(request.session.get('company_id'))
  141. result = {'code': 1, 'content': None, 'msg': None}
  142. attachment_maxsize = BOMsettingHandler.get_attachment_maxsize(company)
  143. if attachment_maxsize:
  144. result['code'] = 0
  145. result['content'] = {
  146. 'company_id': company.id,
  147. 'attachment_maxsize': attachment_maxsize
  148. }
  149. return JsonResponse(result)