views.py 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141
  1. # coding=utf-8
  2. import json
  3. import traceback
  4. from django.db import transaction,IntegrityError
  5. from django.db.models import ProtectedError
  6. from django.views.decorators.csrf import csrf_exempt
  7. from apps.account.decorators import permission_required, token_required
  8. from apps.exceptions import ExportChange, CustomError
  9. from apps.foundation.models import BizLog
  10. from apps.supplier.filters import SupplierFilter
  11. from apps.supplier.models import Supplier
  12. from apps.supplier.resources import SupplierResource, SupplierImporter
  13. from apps.supplier.serializers import SupplierSerializer
  14. from libs import utils
  15. from libs.http import DataGridJSONResponse, JSONResponse, JSONError
  16. @csrf_exempt
  17. @permission_required('supplier.view_supplier')
  18. def supplier_list(request):
  19. f = SupplierFilter(request.GET, queryset=Supplier.objects.all())
  20. rows, total = utils.get_page_data(request, f.qs)
  21. serializer = SupplierSerializer(rows, many=True)
  22. return DataGridJSONResponse(serializer.data, total)
  23. @csrf_exempt
  24. @permission_required('supplier.export_supplier')
  25. def supplier_export(request):
  26. f = SupplierFilter(request.GET, queryset=Supplier.objects.all())
  27. serializer = SupplierSerializer(f.qs, many=True)
  28. export_data = ExportChange.dict_to_obj(serializer)
  29. export_data = SupplierResource().export(export_data)
  30. filename = utils.attachment_save(export_data)
  31. BizLog.objects.addnew(request.user, BizLog.EXPORT, u"导出供应商")
  32. return JSONResponse({'filename': filename})
  33. @csrf_exempt
  34. @permission_required('supplier.add_supplier')
  35. def supplier_save(request):
  36. id = request.GET.get('id')
  37. data = json.loads(request.body)
  38. try:
  39. with transaction.atomic():
  40. serializer = SupplierSerializer.factory(request.user, data, id)
  41. serializer.validSave()
  42. except CustomError, e:
  43. return JSONError(e.get_error_msg())
  44. except Exception, e:
  45. traceback.print_exc()
  46. return JSONError(u'保存失败!')
  47. return JSONResponse(serializer.data)
  48. @csrf_exempt
  49. @permission_required('supplier.delete_supplier')
  50. def supplier_delete(request):
  51. id = request.GET.get('id')
  52. try:
  53. with transaction.atomic():
  54. supplier = Supplier.getById(id)
  55. BizLog.objects.addnew(request.user, BizLog.DELETE, u"删除供应商[%s],id=%d" % (supplier.name, supplier.id))
  56. supplier.delete()
  57. except CustomError, e:
  58. return JSONError(e.get_error_msg())
  59. except ProtectedError:
  60. return JSONError(u'该供应商已被使用,禁止删除!')
  61. except IntegrityError:
  62. return JSONError(u'该供应商已被使用,禁止删除!')
  63. except Exception, e:
  64. traceback.print_exc()
  65. return JSONError(u'删除失败!')
  66. return JSONResponse({})
  67. @csrf_exempt
  68. @permission_required('supplier.import_supplier')
  69. def supplier_import(request):
  70. file = request.FILES.get('excel_file')
  71. try:
  72. line = 2
  73. importer = SupplierImporter()
  74. excel_rows = importer.getExcelData(file)
  75. with transaction.atomic():
  76. for excel_row in excel_rows:
  77. try:
  78. row = importer.validRow(excel_row)
  79. type = row[u'类别']
  80. if type == u'耗材':
  81. type = Supplier.CONSUMABLE
  82. elif type == u'原料':
  83. type = Supplier.MATERIAL
  84. else:
  85. raise CustomError(u'类别有误,只能填耗材或者原料')
  86. data = {}
  87. data['name'] = row[u'名称']
  88. data['type'] = type
  89. data['contacts'] = row[u'联系人']
  90. data['phone_number'] = row[u'电话']
  91. data['address'] = row[u'地址']
  92. data['opening_bank'] = row[u'开户行']
  93. data['account'] = row[u'账号']
  94. data['tax_number'] = row[u'税号']
  95. data['credit_code'] = row[u'信用代码']
  96. data['notes'] = row[u'备注']
  97. serializer = SupplierSerializer.factory(request.user, data)
  98. serializer.validSave()
  99. except CustomError, e:
  100. raise CustomError(u'第%d行:%s' % (line, e.get_error_msg()))
  101. except Exception, e:
  102. raise CustomError(u'第%d行:%s' % (line, unicode(e)))
  103. line += 1
  104. BizLog.objects.addnew(request.user, BizLog.IMPORT, u"导入供应商数据[%s]条" % (line-2))
  105. except CustomError, e:
  106. return JSONError(e.get_error_msg())
  107. except Exception, e:
  108. traceback.print_exc()
  109. return JSONError(u'导入失败!')
  110. return JSONResponse()
  111. @token_required
  112. def supplier_select(request):
  113. type = int(request.GET.get('type'))
  114. supplier = Supplier.objects.filter(type=type, enabled=True)
  115. data = []
  116. for row in supplier:
  117. item = {
  118. 'id': row.id,
  119. 'value': row.name
  120. }
  121. data.append(item)
  122. return JSONResponse(data)
  123. @csrf_exempt
  124. @token_required
  125. def supplier_options(request):
  126. data = Supplier.TYPE_CHOICES_DICT
  127. return JSONResponse(data)