|
@@ -29,6 +29,7 @@ from django.conf import settings
|
|
|
from apps.foundation.models import BizLog, Option
|
|
|
from resources import SaleOrderResource, SaleOrderDetailResource, GoodsDeliverDetailResource, GoodsDeliverResource, \
|
|
|
GoodsDeliverQueryResource, GoodsDeliverReturnQueryResource
|
|
|
+from apps.finance.models import dbFinanceIncome
|
|
|
|
|
|
|
|
|
@csrf_exempt
|
|
@@ -38,10 +39,26 @@ def sale_order_list(request):
|
|
|
user_ids = request.user.getSubEmployeeIds()
|
|
|
rows = SaleOrder.objects.filter(Q(department_id__in=department_ids) | Q(create_user_id__in=user_ids) | Q(create_user=request.user))
|
|
|
f = SaleOrderFilter(request.GET, queryset=rows)
|
|
|
- total_row = f.qs.aggregate(sum_count=Sum('count'), sum_amount=Sum('amount'))
|
|
|
+ total_row = f.qs.aggregate(
|
|
|
+ sum_count=Sum('count'),
|
|
|
+ sum_amount=Sum('amount'),
|
|
|
+ sum_receive_count=Sum('receive_count'),
|
|
|
+ sum_receive_amount=Sum('receive_amount'),
|
|
|
+ sum_pay_amount=Sum('pay_amount'),
|
|
|
+ sum_put_amount=Sum('put_amount'),
|
|
|
+ sum_fare_amount=Sum('fare_amount'),
|
|
|
+ sum_loss_amount=Sum('loss_amount')
|
|
|
+ )
|
|
|
more = {
|
|
|
'sum_count': Formater.formatCountShow(total_row['sum_count']),
|
|
|
- 'sum_amount': Formater.formatAmountShow(total_row['sum_amount'])
|
|
|
+ 'sum_amount': Formater.formatAmountShow(total_row['sum_amount']),
|
|
|
+ 'sum_receive_count': Formater.formatCountShow(total_row['sum_receive_count']),
|
|
|
+ 'sum_receive_amount': Formater.formatAmountShow(total_row['sum_receive_amount']),
|
|
|
+ 'sum_pay_amount': Formater.formatAmountShow(total_row['sum_pay_amount']),
|
|
|
+ 'sum_put_amount': Formater.formatAmountShow(total_row['sum_put_amount']),
|
|
|
+ 'sum_fare_amount': Formater.formatAmountShow(total_row['sum_fare_amount']),
|
|
|
+ 'sum_loss_amount': Formater.formatAmountShow(total_row['sum_loss_amount']),
|
|
|
+ 'sum_total_amount': Formater.formatAmountShow((total_row['sum_receive_amount'] or 0)-(total_row['sum_loss_amount'] or 0)),
|
|
|
}
|
|
|
rows, total = utils.get_page_data(request, f.qs)
|
|
|
serializer = SaleOrderSerializer(rows, many=True)
|
|
@@ -119,6 +136,7 @@ def sale_order_detail(request):
|
|
|
'no': sale_order.no,
|
|
|
'total_count': Formater.formatCountShow(sale_order.count),
|
|
|
'total_amount': Formater.formatAmountShow(sale_order.amount),
|
|
|
+ 'loss_amount': Formater.formatAmountShow(sale_order.loss_amount),
|
|
|
'name': sale_order.customer.name,
|
|
|
'mobile': sale_order.customer.mobile,
|
|
|
'customer_id': sale_order.customer.id,
|
|
@@ -129,6 +147,7 @@ def sale_order_detail(request):
|
|
|
'check_time': sale_order.check_time and Formater.formatStrTime(sale_order.check_time) or '',
|
|
|
'create_time': Formater.formatStrTime(sale_order.create_time),
|
|
|
'notes': sale_order.notes or '',
|
|
|
+ 'loss_notes': sale_order.loss_notes or '',
|
|
|
}
|
|
|
data = {
|
|
|
'main_data':main_data,
|
|
@@ -147,6 +166,7 @@ def sale_order_detail(request):
|
|
|
'quality_request_text': row.quality_request and row.quality_request.name or '',
|
|
|
'warehouse_place': row.goods.product_base.warehouse_place,
|
|
|
'count': Formater.formatCountShow(row.count),
|
|
|
+ 'receive_count': Formater.formatCountShow(row.receive_count),
|
|
|
'price': Formater.formatPriceShow(row.price),
|
|
|
'amount': Formater.formatAmountShow(row.amount)
|
|
|
}
|
|
@@ -195,6 +215,11 @@ def sale_order_check(request):
|
|
|
order.status = settings.PASS
|
|
|
order.check_user = request.user
|
|
|
order.check_time = timezone.now()
|
|
|
+
|
|
|
+ SaleOrderDetail.objects.filter(main_id=order.id).update(receive_count=F('count'))
|
|
|
+
|
|
|
+ order.updateReceiveAmount()
|
|
|
+
|
|
|
BizLog.objects.addnew(
|
|
|
request.user,
|
|
|
BizLog.CHECK,
|
|
@@ -209,6 +234,10 @@ def sale_order_check(request):
|
|
|
order.status = settings.DEFAULT
|
|
|
order.check_user = None
|
|
|
order.check_time = None
|
|
|
+
|
|
|
+ SaleOrderDetail.objects.filter(main_id=order.id).update(receive_count=0)
|
|
|
+ order.updateReceiveAmount()
|
|
|
+
|
|
|
BizLog.objects.addnew(
|
|
|
request.user,
|
|
|
BizLog.CHECK,
|
|
@@ -222,6 +251,155 @@ def sale_order_check(request):
|
|
|
return JSONError(u'审核失败')
|
|
|
return JSONResponse({})
|
|
|
|
|
|
+@csrf_exempt
|
|
|
+@permission_required('order.loss_sale_order')
|
|
|
+def sale_order_loss_save(request):
|
|
|
+ id = request.GET.get('id')
|
|
|
+ data = json.loads(request.body)
|
|
|
+
|
|
|
+ try:
|
|
|
+ with transaction.atomic():
|
|
|
+ order = SaleOrder.getById(id)
|
|
|
+ if order.status == settings.DEFAULT:
|
|
|
+ raise CustomError(u'该订单尚未审核')
|
|
|
+ loss_amount = data['order_data']['amount']
|
|
|
+ loss_notes = data['order_data']['notes']
|
|
|
+ for item in data['items']:
|
|
|
+ detail = SaleOrderDetail.objects.filter(id=item['detail_id']).first()
|
|
|
+ detail.receive_count = Formater.formatCount(item['receive_count'])
|
|
|
+ detail.save()
|
|
|
+
|
|
|
+ order.updateReceiveAmount()
|
|
|
+ order.loss_amount = Formater.formatAmount(loss_amount)
|
|
|
+ order.loss_notes = loss_notes
|
|
|
+ order.save()
|
|
|
+ BizLog.objects.addnew(
|
|
|
+ request.user,
|
|
|
+ BizLog.UPDATE,
|
|
|
+ u"销售订单[%s]扣减,id=%d" % (order.no, order.id),
|
|
|
+ )
|
|
|
+
|
|
|
+ except CustomError, e:
|
|
|
+ return JSONError(e.get_error_msg())
|
|
|
+ except Exception, e:
|
|
|
+ traceback.print_exc()
|
|
|
+ return JSONError(u'保存失败')
|
|
|
+ return JSONResponse({})
|
|
|
+
|
|
|
+
|
|
|
+@csrf_exempt
|
|
|
+@permission_required('order.pay_sale_order')
|
|
|
+def sale_order_pay(request):
|
|
|
+ id = request.GET.get('id')
|
|
|
+ data = json.loads(request.body)
|
|
|
+
|
|
|
+ try:
|
|
|
+ with transaction.atomic():
|
|
|
+ order = SaleOrder.getById(id)
|
|
|
+ if order.status == settings.DEFAULT:
|
|
|
+ raise CustomError(u'该订单尚未审核')
|
|
|
+ if order.cleared:
|
|
|
+ raise CustomError(u'该订单已结清')
|
|
|
+
|
|
|
+ order.pay_amount += Formater.formatAmount(data['actual_amount'])
|
|
|
+ order.save()
|
|
|
+ total_amount = order.receive_amount - order.loss_amount
|
|
|
+
|
|
|
+ if order.pay_amount >= total_amount:
|
|
|
+ order.cleared = True
|
|
|
+ order.save()
|
|
|
+
|
|
|
+ dbFinanceIncome.objects.create(
|
|
|
+ referer_no=order.no,
|
|
|
+ create_user=request.user,
|
|
|
+ department=request.user.department,
|
|
|
+ type=dbFinanceIncome.SALE_ENTRY_PAY,
|
|
|
+ amount=Formater.formatAmount(data['actual_amount']),
|
|
|
+ account_id=data['account'],
|
|
|
+ check_status=settings.PASS,
|
|
|
+ check_user=request.user,
|
|
|
+ check_time=timezone.now(),
|
|
|
+ notes=data['notes']
|
|
|
+ )
|
|
|
+
|
|
|
+ BizLog.objects.addnew(
|
|
|
+ request.user,
|
|
|
+ BizLog.UPDATE,
|
|
|
+ u"销售订单[%s]结算,id=%d" % (order.no, order.id),
|
|
|
+ )
|
|
|
+
|
|
|
+ except CustomError, e:
|
|
|
+ return JSONError(e.get_error_msg())
|
|
|
+ except Exception, e:
|
|
|
+ traceback.print_exc()
|
|
|
+ return JSONError(u'保存失败')
|
|
|
+ return JSONResponse({})
|
|
|
+
|
|
|
+
|
|
|
+@csrf_exempt
|
|
|
+@permission_required('order.pay_sale_order')
|
|
|
+def sale_order_fare_save(request):
|
|
|
+ id = request.GET.get('id')
|
|
|
+ fare_amount = request.GET.get('fare_amount')
|
|
|
+ fare_account = request.GET.get('fare_account')
|
|
|
+ put_amount = request.GET.get('put_amount')
|
|
|
+ put_account = request.GET.get('put_account')
|
|
|
+
|
|
|
+ try:
|
|
|
+ with transaction.atomic():
|
|
|
+ order = SaleOrder.getById(id)
|
|
|
+
|
|
|
+ if fare_amount != 0:
|
|
|
+ if not fare_account:
|
|
|
+ raise CustomError(u'请选择运费账户')
|
|
|
+ fare_amount = Formater.formatAmount(fare_amount)
|
|
|
+ order.fare_amount += fare_amount
|
|
|
+
|
|
|
+ dbFinanceIncome.objects.create(
|
|
|
+ referer_no=order.referer_no,
|
|
|
+ create_user=request.user,
|
|
|
+ department=request.user.department,
|
|
|
+ type=dbFinanceIncome.SALE_ENTRY_FARE,
|
|
|
+ amount=(-fare_amount),
|
|
|
+ account_id=fare_account,
|
|
|
+ check_status=settings.PASS,
|
|
|
+ check_user=request.user,
|
|
|
+ check_time=timezone.now()
|
|
|
+ )
|
|
|
+
|
|
|
+ if put_amount != 0:
|
|
|
+ if not put_account:
|
|
|
+ raise CustomError(u'请选择装车费账户')
|
|
|
+ put_amount = Formater.formatAmount(put_amount)
|
|
|
+ order.put_amount += put_amount
|
|
|
+
|
|
|
+ dbFinanceIncome.objects.create(
|
|
|
+ referer_no=order.referer_no,
|
|
|
+ create_user=request.user,
|
|
|
+ department=request.user.department,
|
|
|
+ type=dbFinanceIncome.SALE_ENTRY_UNLOAD,
|
|
|
+ amount=(-fare_amount),
|
|
|
+ account_id=put_account,
|
|
|
+ check_status=settings.PASS,
|
|
|
+ check_user=request.user,
|
|
|
+ check_time=timezone.now()
|
|
|
+ )
|
|
|
+
|
|
|
+ order.save()
|
|
|
+
|
|
|
+ BizLog.objects.addnew(
|
|
|
+ request.user,
|
|
|
+ BizLog.UPDATE,
|
|
|
+ u"销售订单[%s]添加装运费,id=%d" % (order.no, order.id),
|
|
|
+ )
|
|
|
+
|
|
|
+ except CustomError, e:
|
|
|
+ return JSONError(e.get_error_msg())
|
|
|
+ except Exception, e:
|
|
|
+ traceback.print_exc()
|
|
|
+ return JSONError(u'保存失败')
|
|
|
+ return JSONResponse({})
|
|
|
+
|
|
|
@csrf_exempt
|
|
|
@permission_required('order.export_sale_order')
|
|
|
def sale_order_export_detail(request):
|