123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134 |
- # coding=utf-8
- import traceback
- import json
- from django.views.decorators.csrf import csrf_exempt
- from django.db import transaction,IntegrityError
- from django.db.models import ProtectedError
- from django.db import transaction
- from django.db.models import Q
- from apps.exceptions import ExportChange, CustomError
- from apps.foundation.models import BizLog
- from libs.http import JSONResponse, JSONError, DataGridJSONResponse
- from libs import utils
- from apps.account.decorators import permission_required, token_required
- from models import Customer
- from serializers import CustomerSerializer
- from filters import CustomerFilter
- from resources import CustomerResource, CustomerImporter
- @csrf_exempt
- @permission_required('customer.view_customer')
- def customer_list(request):
- f = CustomerFilter(request.GET, queryset=Customer.objects.all())
- rows, total = utils.get_page_data(request, f.qs)
- serializer = CustomerSerializer(rows, many=True)
- return DataGridJSONResponse(serializer.data, total)
- @csrf_exempt
- @permission_required('customer.export_customer')
- def customer_export(request):
- f = CustomerFilter(request.GET, queryset=Customer.objects.all())
- serializer = CustomerSerializer(f.qs, many=True)
- export_data = ExportChange.dict_to_obj(serializer)
- export_data = CustomerResource().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('customer.add_customer')
- def customer_save(request):
- id = request.GET.get('id')
- data = json.loads(request.body)
- try:
- with transaction.atomic():
- serializer = CustomerSerializer.factory(request.user, data, id)
- serializer.validSave()
- return JSONResponse(serializer.data)
- except CustomError, e:
- return JSONError(e.get_error_msg())
- except Exception, e:
- traceback.print_exc()
- return JSONError(u'保存失败!')
- @csrf_exempt
- @permission_required('customer.delete_customer')
- def customer_delete(request):
- id = request.GET.get('id')
- try:
- with transaction.atomic():
- customer = Customer.getById(id)
- BizLog.objects.addnew(request.user, BizLog.DELETE, u"删除客户[%s],id=%d" % (customer.name, customer.id))
- customer.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('customer.import_customer')
- def customer_import(request):
- file = request.FILES.get('excel_file')
- try:
- line = 2
- importer = CustomerImporter()
- excel_rows = importer.getExcelData(file)
- with transaction.atomic():
- for excel_row in excel_rows:
- try:
- row = importer.validRow(excel_row)
- data = {}
- data['name'] = row[u'姓名']
- data['mobile'] = row[u'手机号']
- data['company_name'] = row[u'公司名称']
- data['company_tel'] = row[u'公司电话']
- data['opening_bank'] = row[u'开户行']
- data['account'] = row[u'账号']
- data['credit_code'] = row[u'信用代码']
- data['address'] = row[u'地址']
- data['notes'] = row[u'备注']
- serializer = CustomerSerializer.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()
- @csrf_exempt
- @token_required
- def customer_select(request):
- param = request.GET.get('param') or request.GET.get('keywords')
- rows = Customer.objects.filter()
- if param:
- rows = rows.filter(
- Q(name__icontains=param)|
- Q(mobile__icontains=param)|
- Q(company_name__icontains=param)
- )
- serializer = CustomerSerializer(rows, many=True)
- return JSONResponse(serializer.data)
|