123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556 |
- #coding=utf-8
- import traceback
- import json
- from django.utils import timezone
- from libs import utils
- from libs.http import JSONError, JSONResponse,DataGridJSONResponse
- from apps.account.decorators import token_required
- from django.contrib.auth.decorators import login_required
- from django.db import transaction, IntegrityError
- from apps.exceptions import CustomError
- from apps.foundation.models import BizLog
- from django.db.models import Q, Sum
- from django.conf import settings
- from .models import *
- from .serializers import *
- from .filters import *
- from apps.customer.models import Customer
- from apps.account.models import Branch
- from apps.WechatApplet.models import WechatApplet
- from .base import OrderUpdate
- from util.format import Formater
- from util.file_operation import PathAndRename, resizePicture, UploadFile, DeleteFile
- from django.http import JsonResponse as DJR
- @token_required
- @login_required()
- def branch_list(request):
- f = BranchFilter(request.GET, queryset=Branch.objects.filter())
- rows, total = utils.get_page_data(request, f.qs)
- serializer = BranchSerializer(rows, many=True)
- return DataGridJSONResponse(serializer.data, total)
- @token_required
- @login_required()
- def branch_save(request):
- id = request.GET.get('id')
- data = json.loads(request.body)
- try:
- with transaction.atomic():
- serializer = BranchSerializer.factory(request.user, data, id)
- serializer.validSave()
- return JSONResponse(serializer.data)
- except CustomError as e:
- return JSONError(e.get_error_msg())
- except Exception as e:
- traceback.print_exc()
- return JSONError(u'保存失败!')
- @token_required
- @login_required()
- def self_branch(request):
- order = Branch.objects.filter(id=request.user.branch_id).first()
- data = {}
- if order:
- data = {'name': order.name, 'tel': order.tel, 'address': order.address}
- return JSONResponse({'data': data})
- @token_required
- @login_required()
- def member_list(request):
- f = CustomerFilter(request.GET, queryset=Customer.objects.filter(branch=request.user.branch))
- rows, total = utils.get_page_data(request, f.qs)
- serializer = CustomerSerializer(rows, many=True)
- return DataGridJSONResponse(serializer.data, total)
- @token_required
- @login_required()
- def member_coupon_list(request):
- f = MemberCouponFilter(request.GET, queryset=MemberCoupon.objects.filter(member__branch=request.user.branch))
- rows, total = utils.get_page_data(request, f.qs)
- serializer = MemberCouponSerializer(rows, many=True)
- return DataGridJSONResponse(serializer.data, total)
- @token_required
- @login_required()
- def coupon_write_off(request):
- id = request.GET.get('id')
- try:
- with transaction.atomic():
- instance = MemberCoupon.getById(id)
- if instance.member.branch and instance.member.branch_id != request.user.branch_id:
- raise CustomError(u'禁止跨店操作!')
- instance.writeOff()
- BizLog.objects.addnew(request.user, BizLog.CHECK, u"核销会员优惠券,id=%d" % instance.id)
- except CustomError as e:
- return JSONError(e.get_error_msg())
- except Exception as e:
- traceback.print_exc()
- return JSONError(u'核销失败!')
- return JSONResponse()
- @token_required
- @login_required()
- def coupon_cancel_write_off(request):
- id = request.GET.get('id')
- try:
- with transaction.atomic():
- instance = MemberCoupon.getById(id)
- if instance.member.branch and instance.member.branch_id != request.user.branch_id:
- raise CustomError(u'禁止跨店操作!')
- instance.cancelWriteOff()
- BizLog.objects.addnew(request.user, BizLog.CHECK, u"撤销核销会员优惠券,id=%d" % instance.id)
- except CustomError as e:
- return JSONError(e.get_error_msg())
- except Exception as e:
- traceback.print_exc()
- return JSONError(u'撤销核销失败!')
- return JSONResponse()
- @token_required
- @login_required()
- def order_list(request):
- OrderUpdate.update_status()
- if request.user.is_superuser:
- rows = Order.objects.filter()
- else:
- rows = Order.objects.filter(branch=request.user.branch)
- f = OrderFilter(request.GET, queryset=rows)
- rows_sum = f.qs.aggregate(
- sum_rebate=Sum('rebate'),
- sum_amount=Sum('amount')
- )
- more = {
- 'sum_amount':Formater.formatPriceShow(rows_sum['sum_amount']),
- 'sum_rebate':Formater.formatPriceShow(rows_sum['sum_rebate']),
- }
- rows, total = utils.get_page_data(request, f.qs)
- serializer = OrderSerializer(rows, many=True)
- return DataGridJSONResponse(serializer.data, total, more)
- @token_required
- @login_required()
- def order_split_account(request):
- id = request.GET.get('id')
- try:
- order = Order.objects.filter(id=id).first()
- app = WechatApplet.objects.filter().first()
- if not app:
- raise CustomError(u'未设置小程序信息!')
- if not order:
- raise CustomError(u'未找到相应的订单')
- if not order.pay or order.pay.status != Pay.CONFIRM:
- raise CustomError(u'该订单尚未支付,无法分账!')
- with transaction.atomic():
- if not order.splitaccount:
- if (order.rebate <= 0) or (not order.recommend_member) or (order.pay.profit_sharing == "N"):
- raise CustomError(u'该订单无需分账!')
- sp, spd, spr = SplitAccount._addnew(order.branch, order.id, order.rebate, order.recommend_member)
- order.splitaccount = sp
- order.save()
- sp = order.splitaccount
- spd = SplitAccountDetail.objects.filter(main=sp).first()
- if not spd:
- raise CustomError(u'未找到相应的分账明细!')
- if spd.status == SplitAccountDetail.SUCCESS:
- raise CustomError(u'该订单已分账,禁止重复申请!')
- order.splitaccount.handSplitAccont(spd, order.pay, app)
- BizLog.objects.addnew(request.user, BizLog.INSERT, u"订单申请分账,id=%d" % order.id)
- except CustomError as e:
- return JSONError(e.get_error_msg())
- except Exception as e:
- traceback.print_exc()
- return JSONError(u'订单分账申请失败!')
- return JSONResponse()
- @token_required
- @login_required()
- def order_update_split(request):
- id = request.GET.get('id')
- try:
- order = Order.objects.filter(id=id).first()
- app = WechatApplet.objects.filter().first()
- if not app:
- raise CustomError(u'未设置小程序信息!')
- if not order:
- raise CustomError(u'未找到相应的订单!')
- if not order.splitaccount:
- raise CustomError(u'未找到该订单分账信息!')
- sp = order.splitaccount
- spd = SplitAccountDetail.objects.filter(main=sp).first()
- if not spd:
- raise CustomError(u'未找到相应的分账明细!')
- with transaction.atomic():
- order.splitaccount.updateAccountSplit(spd, order.pay, app)
- BizLog.objects.addnew(request.user, BizLog.INSERT, u"刷新订单分账结果,id=%d" % order.id)
- except CustomError as e:
- return JSONError(e.get_error_msg())
- except Exception as e:
- traceback.print_exc()
- return JSONError(u'刷新订单分账结果失败!')
- return JSONResponse()
- @token_required
- @login_required()
- def coupon_list(request):
- f = BranchFilter(request.GET, queryset=Coupon.objects.filter(branch=request.user.branch))
- rows, total = utils.get_page_data(request, f.qs)
- serializer = CouponSerializer(rows, many=True)
- return DataGridJSONResponse(serializer.data, total)
- @token_required
- @login_required()
- def coupon_save(request):
- id = request.GET.get('id')
- data = json.loads(request.body)
- try:
- with transaction.atomic():
- data['branch'] = request.user.branch_id
- serializer = CouponSerializer.factory(request.user, data, id)
- serializer.validSave()
- return JSONResponse(serializer.data)
- except CustomError as e:
- return JSONError(e.get_error_msg())
- except Exception as e:
- traceback.print_exc()
- return JSONError(u'保存失败!')
- @token_required
- @login_required()
- def coupon_dict(request):
- rows = Coupon.objects.filter(
- Q(branch=request.user.branch, enabled=True) &
- Q(
- Q(end_date__isnull=False) & Q(end_date__gt=timezone.now().date()) |
- Q(end_date__isnull=True)
- )
- )
- serializer = CouponComboboxSerializer(rows, many=True)
- return DataGridJSONResponse(serializer.data, rows.count())
- @token_required
- @login_required()
- def activity_list(request):
- if request.user.is_superuser:
- rows = Activity.objects.filter(delete=False)
- else:
- rows = Activity.objects.filter(branch_id=request.user.branch_id, delete=False)
- f = ActivityFilter(request.GET, queryset=rows)
- rows, total = utils.get_page_data(request, f.qs)
- serializer = ActivitySerializer(rows, many=True)
- return DataGridJSONResponse(serializer.data, total)
- @token_required
- @login_required()
- def activity_details(request):
- if request.user.is_superuser:
- rows = ActivityDetails.objects.filter(delete=False)
- else:
- rows = ActivityDetails.objects.filter(main__branch_id=request.user.branch_id, delete=False)
- f = ActivityDetailsFilter(request.GET, queryset=rows)
- serializer = ActivityDetailsSerializer(f.qs, many=True)
- return DataGridJSONResponse(serializer.data, len(serializer.data))
- @token_required
- @login_required()
- def activity_detail_list(request):
- if request.user.is_superuser:
- rows = ActivityDetails.objects.filter(delete=False)
- else:
- rows = ActivityDetails.objects.filter(main__branch_id=request.user.branch_id, delete=False)
- f = ActivityDetailsFilter(request.GET, queryset=rows)
- rows, total = utils.get_page_data(request, f.qs)
- serializer = ActivityDetailsSerializer(rows, many=True)
- return DataGridJSONResponse(serializer.data, total)
- @token_required
- @login_required()
- def activity_coupon_list(request):
- if request.user.is_superuser:
- rows = ActivityCoupon.objects.filter(coupon__enabled=True)
- else:
- rows = ActivityCoupon.objects.filter(coupon__branch_id=request.user.branch_id, coupon__enabled=True)
- f = ActivityCouponFilter(request.GET, queryset=rows)
- rows, total = utils.get_page_data(request, f.qs)
- serializer = ActivityCouponSerializer(rows, many=True)
- return DataGridJSONResponse(serializer.data, total)
- @token_required
- @login_required()
- def activity_save(request):
- #id = request.GET.get('id')
- items = json.loads(request.POST.get('items'))
- production_data = json.loads(request.POST.get('production'))
- try:
- with transaction.atomic():
- production_data['branch'] = request.user.branch_id
- serializer = ActivitySerializer.factory(request.user, production_data)
- order = serializer.validSave()
- for item in items:
- if float(item['amount']) * 0.3 < float(item['rebate']):
- raise CustomError(u"项目[%s]返利不得超过价格的30%" % item['name'])
- item['main'] = order.id
- production = ActivityDetailsSerializer.factory(request.user, data=item)
- production.validSave()
- return JSONResponse(serializer.data)
- except CustomError as e:
- return JSONError(e.get_error_msg())
- except Exception as e:
- traceback.print_exc()
- return JSONError(u'保存失败!')
- @token_required
- @login_required()
- def activity_edit(request):
- id = request.GET.get('id')
- items = json.loads(request.POST.get('items'))
- production_data = json.loads(request.POST.get('production'))
- try:
- with transaction.atomic():
- production_data['branch'] = request.user.branch_id
- serializer = ActivitySerializer.factory(request.user, production_data, id)
- order = serializer.validSave()
- edit_ids = []
- exist_rows = ActivityDetails.objects.filter(main_id=order.id, delete=False).values('id')
- exist_ids = [exist_row['id'] for exist_row in exist_rows]
- for item in items:
- if float(item['amount']) * 0.3 < float(item['rebate']):
- raise CustomError(u"项目[%s]返利不得超过价格的30%" % item['name'])
- if item['id']:
- edit_ids.append(item['id'])
- item['main'] = order.id
- production = ActivityDetailsSerializer.factory(request.user, data=item)
- production.validSave()
- ActivityDetails.objects.filter(Q(main_id=order.id, id__in=exist_ids), ~Q(id__in=edit_ids)).update(delete=True)
- return JSONResponse(serializer.data)
- except CustomError as e:
- return JSONError(e.get_error_msg())
- except Exception as e:
- traceback.print_exc()
- return JSONError(u'保存失败!')
- @token_required
- @login_required()
- def activity_delete(request):
- id = request.GET.get('id')
- try:
- with transaction.atomic():
- order = Activity.objects.filter(id=id).first()
- if order.check_status == settings.PASS:
- raise CustomError(u'该活动已审核')
- order.delete = True
- order.save()
- BizLog.objects.addnew(request.user, BizLog.INSERT, u"删除活动[%s],id=%s" % (order.title, order.id))
- return JSONResponse({})
- except CustomError as e:
- return JSONError(e.get_error_msg())
- except Exception as e:
- traceback.print_exc()
- return JSONError(u'保存失败!')
- @token_required
- @login_required()
- def activity_check(request):
- id = request.GET.get('id')
- status = request.GET.get('status')
- try:
- with transaction.atomic():
- order = Activity.objects.filter(id=id).first()
- if order.delete:
- raise CustomError(u'该活动已删除')
- if order.check_status == int(status):
- raise CustomError(u'该活动已当前状态不允许执行此操作')
- if int(status) == settings.PASS:
- order.check_status = settings.PASS
- order.save()
- BizLog.objects.addnew(request.user, BizLog.INSERT, u"审核活动[%s],id=%s" % (order.title, order.id))
- else:
- order.check_status = settings.DEFAULT
- order.save()
- BizLog.objects.addnew(request.user, BizLog.INSERT, u"活动撤销审核[%s],id=%s" % (order.title, order.id))
- return JSONResponse({})
- except CustomError as e:
- return JSONError(e.get_error_msg())
- except Exception as e:
- traceback.print_exc()
- return JSONError(u'保存失败!')
- @token_required
- @login_required()
- def activity_signs_save(request):
- id = request.GET.get('id')
- signs = request.POST.get('signs')
- try:
- with transaction.atomic():
- signs = json.loads(signs)
- order = Activity.objects.filter(id=id).first()
- if order.delete:
- raise CustomError(u'该活动已删除')
- save_sign = ''
- for sign in signs:
- save_sign += sign + ','
- order.required_signs = save_sign
- order.save()
- BizLog.objects.addnew(request.user, BizLog.INSERT, u"活动设置必填项[%s],id=%s" % (order.title, order.id),signs )
- return JSONResponse({})
- except CustomError as e:
- return JSONError(e.get_error_msg())
- except Exception as e:
- traceback.print_exc()
- return JSONError(u'保存失败!')
- @token_required
- @login_required()
- def activity_coupon_save(request):
- id = request.GET.get('id')
- coupon_ids = request.POST.get('coupons')
- try:
- with transaction.atomic():
- coupons = json.loads(coupon_ids)
- order = ActivityDetails.objects.filter(id=id).first()
- if order.delete:
- raise CustomError(u'该活动已删除')
- ActivityCoupon.objects.filter(main=order).delete()
- for coupon in coupons:
- ActivityCoupon.objects.create(
- main=order,
- coupon_id=coupon
- )
- BizLog.objects.addnew(request.user, BizLog.INSERT, u"活动添加优惠券[%s],项目[%s],id=%s" % (order.main.title, order.name, order.id),coupon_ids )
- return JSONResponse({})
- except CustomError as e:
- return JSONError(e.get_error_msg())
- except Exception as e:
- traceback.print_exc()
- return JSONError(u'保存失败!')
- @token_required
- @login_required()
- def activity_code(request):
- id = request.GET.get('id')
- try:
- with transaction.atomic():
- order = Activity.getById1(id)
- if order.delete:
- raise CustomError(u'该活动已删除')
- if not order.wxapp_img:
- app = WechatApplet.objects.filter().first()
- wxCode = app.generateActivityWXappCode(order.id)
- order.wxapp_img = settings.MEDIA_URL + wxCode
- order.save()
- return JSONResponse({'data': order.wxapp_img})
- except CustomError as e:
- return JSONError(e.get_error_msg())
- except Exception as e:
- traceback.print_exc()
- return JSONError(u'获取失败!')
- # def ueditor_image(request):
- # try:
- # upload_path = PathAndRename("upload/")
- #
- # data = {}
- # if request.FILES.getlist('upfile'):
- # document = request.FILES.getlist('upfile')[0]
- # type = document.name.split('.')[-1]
- # name = timezone.now().strftime('%Y%m%d%H%M%S%f')
- # filename = "%s-%s.%s" % (
- # upload_path.path, name, type)
- # filename = filename.lower()
- # full_filename = "%s/%s" % (settings.MEDIA_ROOT, filename)
- # with open(full_filename, 'wb+') as destination:
- # for chunk in document.chunks():
- # destination.write(chunk)
- #
- # resizePicture(full_filename, 500)
- # data = {
- # "state": "SUCCESS",
- # "original": "%s.%s" % (name, type),
- # "title": "%s.%s" % (name, type),
- # "url": 'https://jpm.zzly.vip' + settings.MEDIA_URL + filename
- # }
- # return DJR(data, safe=False)
- # except CustomError as e:
- # return JSONError(e.get_error_msg())
- # except Exception as e:
- # traceback.print_exc()
- # return JSONError(u'图片上传失败!')
- @token_required
- @login_required()
- def upload_image(request):
- id = request.GET.get('id')
- poster = request.FILES.get('image', None)
- try:
- if not poster:
- raise CustomError(u'未找到上传文件!')
- activity = Activity.getById1(id)
- if activity.delete:
- raise CustomError(u'该活动已删除')
- with transaction.atomic():
- filename = UploadFile(poster, "upload/", width=500)
- if activity.pic:
- DeleteFile(activity.pic)
- activity.pic = filename
- activity.save()
- return JSONResponse({})
- except CustomError as e:
- return JSONError(e.get_error_msg())
- except Exception as e:
- traceback.print_exc()
- return JSONError(u'上传失败!')
|