from django.http import HttpResponse, JsonResponse, QueryDict from django.views.decorators.csrf import csrf_exempt from django.forms import model_to_dict from .model_handler import PartAttachmentHandler, PartHandler, VendorHandler, EcnHandler, BOMsettingHandler from .models import PartAttachment, VendorAttachment from Info.model_handler import CompanyHandler, UserHandler from Info.func import file_upload, get_file from .func import part_info def pn_check(request): company = CompanyHandler.get_by_id(request.session.get('company_id')) result = {'code': 1, 'content': None} if request.method == 'GET': part = PartHandler.exist_pn(request.GET.get('part_number'), company) if part: result = {'code': 1, 'content': "这个料号已经使用了。"} else: result = {'code': 0, 'content': None} return JsonResponse(result) @csrf_exempt def file(request): result = {'code': 1, 'content': None} company = CompanyHandler.get_by_id(request.session.get('company_id')) user = UserHandler.get_by_id(request.session.get('user_id')) if request.method == 'GET': return get_file(request) if request.method == 'POST': upload_result = file_upload(request, ['BOM', 'part']) if upload_result['code'] == 0: p_attachment = PartAttachment() p_attachment.company = company p_attachment.creator = user p_attachment.display_name = upload_result['target_file_name'] p_attachment.url = upload_result['target_file_path'] + \ upload_result['target_file_name'] p_attachment.save() content = {'id': p_attachment.id, 'url': p_attachment.url, 'display_name': p_attachment.display_name} result['code'] = 0 result['content'] = content else: result['content'] = '上传失败' return JsonResponse(result) if request.method == 'DELETE': post_data = eval(request.body) if PartAttachmentHandler.del_by_id(post_data['delete_attachment_id']): result = {'code': 0, 'content': None} else: result = {'code': 1, 'content': '删除失败'} return JsonResponse(result) def search_part_number(request): if request.method == 'GET': result = {'code': 1, 'content': None, 'msg': None} company = CompanyHandler.get_by_id(request.session.get('company_id')) part_number_keyword = request.GET.get('part_number') parts = PartHandler.search_like_pn(part_number_keyword, company) part_list = [] for p in parts: part_list.append(model_to_dict(p)) result['code'] = 0 result['content'] = part_list return JsonResponse(result) def get_draft_part(request): # 读取draft状态下的part数据 if request.method == 'GET': result = {'code': 1, 'content': None, 'msg': None} company = CompanyHandler.get_by_id(request.session.get('company_id')) part = PartHandler.get_by_id(request.GET.get('edit_id')) if part.company != company: # 校验part归属问题 result = {'code': 1, 'content': None, 'msg': 'part is not for this company'} return JsonResponse(result) if part: # part_attachments = PartAttachmentHandler.search_by_part(part) # attachment_list = [] # for p_a in part_attachments: # attachment = {'id':p_a.id , 'url': p_a.url, 'display_name': p_a.display_name} # attachment_list.append(attachment) # part_dict = model_to_dict(part) # part_dict['sub_parts'] = eval(part_dict['sub_parts']) # part_dict['attachment'] = attachment_list # vendor_detail = {} # if part.vendor: # vendor_detail = { # 'id': part.vendor.id, # 'code': part.vendor.code, # 'name': part.vendor.name, # } # part_dict['vendor_detail'] = vendor_detail part_dict = part_info(part) result = {'code': 0, 'content': part_dict, 'msg': 'success'} return JsonResponse(result) def ecn_part_detail(request): # 读取ECN具体签核料号的信息 if request.method == 'GET': result = {'code': 1, 'content': None, 'msg': None} ECN_id = request.GET.get('ecn_id') if ECN_id: ecn = EcnHandler.get_by_id(ECN_id) company = CompanyHandler.get_by_id( request.session.get('company_id')) if ecn.target_part.company != company: # 校验part归属问题 result = {'code': 1, 'content': None, 'msg': 'part is not for this company'} return JsonResponse(result) content = { 'ecn_id': ecn.id, 'part': part_info(ecn.target_part) } result['content'] = content result['code'] = 0 else: result['msg'] = 'ECN没有找到' return JsonResponse(result) @csrf_exempt def part_EOL(request): user = UserHandler.get_by_id(request.session.get('user_id')) company = CompanyHandler.get_by_id(request.session.get('company_id')) result = {'code': 1, 'content': None, 'msg': None} if request.method == 'POST': post_data = eval(request.body) EOL_pn = post_data['EOL_pn'] part = PartHandler.get_by_pn(EOL_pn, company) all_ver_parts = PartHandler.all_ver_by_pn(EOL_pn, company) if user == part.owner: # 停用released料号 part.life_cycle = 'EOL' part.save() # 删除签核中和草稿中的料号 for p in all_ver_parts: if p.life_cycle in ['draft', 'sign-off']: p.delete() result['msg'] = '料号{}停用成功'.format(EOL_pn) result['code'] = 0 # 会直接删除料号相关的,签核中的ECN。关系是on_delete.cascade # 会直接删除料号相关签核中的签核。关系是on_delete.cascade else: result['msg'] = '料号停用失败' result['content'] = '非料号用户本人' return JsonResponse(result) def attachment_maxsize(request): # 获取BOM附件大小限制 # user = UserHandler.get_by_id(request.session.get('user_id')) company = CompanyHandler.get_by_id(request.session.get('company_id')) result = {'code': 1, 'content': None, 'msg': None} attachment_maxsize = BOMsettingHandler.get_attachment_maxsize(company) if attachment_maxsize: result['code'] = 0 result['content'] = { 'company_id': company.id, 'attachment_maxsize': attachment_maxsize } return JsonResponse(result)