views.py 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134
  1. # coding=utf-8
  2. import traceback
  3. import json
  4. from django.views.decorators.csrf import csrf_exempt
  5. from django.db import transaction,IntegrityError
  6. from django.db.models import ProtectedError
  7. from django.db import transaction
  8. from django.db.models import Q
  9. from apps.exceptions import ExportChange, CustomError
  10. from apps.foundation.models import BizLog
  11. from libs.http import JSONResponse, JSONError, DataGridJSONResponse
  12. from libs import utils
  13. from apps.account.decorators import permission_required, token_required
  14. from models import Customer
  15. from serializers import CustomerSerializer
  16. from filters import CustomerFilter
  17. from resources import CustomerResource, CustomerImporter
  18. @csrf_exempt
  19. @permission_required('customer.view_customer')
  20. def customer_list(request):
  21. f = CustomerFilter(request.GET, queryset=Customer.objects.all())
  22. rows, total = utils.get_page_data(request, f.qs)
  23. serializer = CustomerSerializer(rows, many=True)
  24. return DataGridJSONResponse(serializer.data, total)
  25. @csrf_exempt
  26. @permission_required('customer.export_customer')
  27. def customer_export(request):
  28. f = CustomerFilter(request.GET, queryset=Customer.objects.all())
  29. serializer = CustomerSerializer(f.qs, many=True)
  30. export_data = ExportChange.dict_to_obj(serializer)
  31. export_data = CustomerResource().export(export_data)
  32. filename = utils.attachment_save(export_data)
  33. BizLog.objects.addnew(request.user, BizLog.EXPORT, u"导出客户")
  34. return JSONResponse({'filename': filename})
  35. @csrf_exempt
  36. @permission_required('customer.add_customer')
  37. def customer_save(request):
  38. id = request.GET.get('id')
  39. data = json.loads(request.body)
  40. try:
  41. with transaction.atomic():
  42. serializer = CustomerSerializer.factory(request.user, data, id)
  43. serializer.validSave()
  44. return JSONResponse(serializer.data)
  45. except CustomError, e:
  46. return JSONError(e.get_error_msg())
  47. except Exception, e:
  48. traceback.print_exc()
  49. return JSONError(u'保存失败!')
  50. @csrf_exempt
  51. @permission_required('customer.delete_customer')
  52. def customer_delete(request):
  53. id = request.GET.get('id')
  54. try:
  55. with transaction.atomic():
  56. customer = Customer.getById(id)
  57. BizLog.objects.addnew(request.user, BizLog.DELETE, u"删除客户[%s],id=%d" % (customer.name, customer.id))
  58. customer.delete()
  59. except CustomError, e:
  60. return JSONError(e.get_error_msg())
  61. except ProtectedError:
  62. return JSONError(u'该客户已被使用,禁止删除!')
  63. except IntegrityError:
  64. return JSONError(u'该客户已被使用,禁止删除!')
  65. except Exception, e:
  66. traceback.print_exc()
  67. return JSONError(u'删除失败!')
  68. return JSONResponse({})
  69. @csrf_exempt
  70. @permission_required('customer.import_customer')
  71. def customer_import(request):
  72. file = request.FILES.get('excel_file')
  73. try:
  74. line = 2
  75. importer = CustomerImporter()
  76. excel_rows = importer.getExcelData(file)
  77. with transaction.atomic():
  78. for excel_row in excel_rows:
  79. try:
  80. row = importer.validRow(excel_row)
  81. data = {}
  82. data['name'] = row[u'姓名']
  83. data['mobile'] = row[u'手机号']
  84. data['company_name'] = row[u'公司名称']
  85. data['company_tel'] = row[u'公司电话']
  86. data['opening_bank'] = row[u'开户行']
  87. data['account'] = row[u'账号']
  88. data['credit_code'] = row[u'信用代码']
  89. data['address'] = row[u'地址']
  90. data['notes'] = row[u'备注']
  91. serializer = CustomerSerializer.factory(request.user, data)
  92. serializer.validSave()
  93. except CustomError, e:
  94. raise CustomError(u'第%d行:%s' % (line, e.get_error_msg()))
  95. except Exception, e:
  96. raise CustomError(u'第%d行:%s' % (line, unicode(e)))
  97. line += 1
  98. BizLog.objects.addnew(request.user, BizLog.IMPORT, u"导入客户数据[%s]条" % (line-2))
  99. except CustomError, e:
  100. return JSONError(e.get_error_msg())
  101. except Exception, e:
  102. traceback.print_exc()
  103. return JSONError(u'导入失败!')
  104. return JSONResponse()
  105. @csrf_exempt
  106. @token_required
  107. def customer_select(request):
  108. param = request.GET.get('param') or request.GET.get('keywords')
  109. rows = Customer.objects.filter()
  110. if param:
  111. rows = rows.filter(
  112. Q(name__icontains=param)|
  113. Q(mobile__icontains=param)|
  114. Q(company_name__icontains=param)
  115. )
  116. serializer = CustomerSerializer(rows, many=True)
  117. return JSONResponse(serializer.data)