123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141 |
- # coding=utf-8
- import json
- import traceback
- from django.db import transaction,IntegrityError
- from django.db.models import ProtectedError
- from django.views.decorators.csrf import csrf_exempt
- from apps.account.decorators import permission_required, token_required
- from apps.exceptions import ExportChange, CustomError
- from apps.foundation.models import BizLog
- from apps.supplier.filters import SupplierFilter
- from apps.supplier.models import Supplier
- from apps.supplier.resources import SupplierResource, SupplierImporter
- from apps.supplier.serializers import SupplierSerializer
- from libs import utils
- from libs.http import DataGridJSONResponse, JSONResponse, JSONError
- @csrf_exempt
- @permission_required('supplier.view_supplier')
- def supplier_list(request):
- f = SupplierFilter(request.GET, queryset=Supplier.objects.all())
- rows, total = utils.get_page_data(request, f.qs)
- serializer = SupplierSerializer(rows, many=True)
- return DataGridJSONResponse(serializer.data, total)
- @csrf_exempt
- @permission_required('supplier.export_supplier')
- def supplier_export(request):
- f = SupplierFilter(request.GET, queryset=Supplier.objects.all())
- serializer = SupplierSerializer(f.qs, many=True)
- export_data = ExportChange.dict_to_obj(serializer)
- export_data = SupplierResource().export(export_data)
- filename = utils.attachment_save(export_data)
- BizLog.objects.addnew(request.user, BizLog.EXPORT, u"导出供应商")
- return JSONResponse({'filename': filename})
- @csrf_exempt
- @permission_required('supplier.add_supplier')
- def supplier_save(request):
- id = request.GET.get('id')
- data = json.loads(request.body)
- try:
- with transaction.atomic():
- serializer = SupplierSerializer.factory(request.user, data, id)
- serializer.validSave()
- except CustomError, e:
- return JSONError(e.get_error_msg())
- except Exception, e:
- traceback.print_exc()
- return JSONError(u'保存失败!')
- return JSONResponse(serializer.data)
- @csrf_exempt
- @permission_required('supplier.delete_supplier')
- def supplier_delete(request):
- id = request.GET.get('id')
- try:
- with transaction.atomic():
- supplier = Supplier.getById(id)
- BizLog.objects.addnew(request.user, BizLog.DELETE, u"删除供应商[%s],id=%d" % (supplier.name, supplier.id))
- supplier.delete()
- except CustomError, e:
- return JSONError(e.get_error_msg())
- except ProtectedError:
- return JSONError(u'该供应商已被使用,禁止删除!')
- except IntegrityError:
- return JSONError(u'该供应商已被使用,禁止删除!')
- except Exception, e:
- traceback.print_exc()
- return JSONError(u'删除失败!')
- return JSONResponse({})
- @csrf_exempt
- @permission_required('supplier.import_supplier')
- def supplier_import(request):
- file = request.FILES.get('excel_file')
- try:
- line = 2
- importer = SupplierImporter()
- excel_rows = importer.getExcelData(file)
- with transaction.atomic():
- for excel_row in excel_rows:
- try:
- row = importer.validRow(excel_row)
- type = row[u'类别']
- if type == u'耗材':
- type = Supplier.CONSUMABLE
- elif type == u'原料':
- type = Supplier.MATERIAL
- else:
- raise CustomError(u'类别有误,只能填耗材或者原料')
- data = {}
- data['name'] = row[u'名称']
- data['type'] = type
- data['contacts'] = row[u'联系人']
- data['phone_number'] = row[u'电话']
- data['address'] = row[u'地址']
- data['opening_bank'] = row[u'开户行']
- data['account'] = row[u'账号']
- data['tax_number'] = row[u'税号']
- data['credit_code'] = row[u'信用代码']
- data['notes'] = row[u'备注']
- serializer = SupplierSerializer.factory(request.user, data)
- serializer.validSave()
- except CustomError, e:
- raise CustomError(u'第%d行:%s' % (line, e.get_error_msg()))
- except Exception, e:
- raise CustomError(u'第%d行:%s' % (line, unicode(e)))
- line += 1
- BizLog.objects.addnew(request.user, BizLog.IMPORT, u"导入供应商数据[%s]条" % (line-2))
- except CustomError, e:
- return JSONError(e.get_error_msg())
- except Exception, e:
- traceback.print_exc()
- return JSONError(u'导入失败!')
- return JSONResponse()
- @token_required
- def supplier_select(request):
- type = int(request.GET.get('type'))
- supplier = Supplier.objects.filter(type=type, enabled=True)
- data = []
- for row in supplier:
- item = {
- 'id': row.id,
- 'value': row.name
- }
- data.append(item)
- return JSONResponse(data)
- @csrf_exempt
- @token_required
- def supplier_options(request):
- data = Supplier.TYPE_CHOICES_DICT
- return JSONResponse(data)
|