forked from erp-dev/erp
76 lines
2.2 KiB
Python
76 lines
2.2 KiB
Python
"""Settlement API views"""
|
||
import logging
|
||
import re
|
||
from datetime import datetime, date
|
||
|
||
from django.utils import timezone
|
||
from rest_framework import status
|
||
from rest_framework.views import APIView
|
||
from rest_framework.response import Response
|
||
from rest_framework.permissions import IsAuthenticated
|
||
|
||
from settlement.services import get_plate_order_summary_by_customer
|
||
|
||
logger = logging.getLogger(__name__)
|
||
|
||
|
||
class PlateOrderSummaryView(APIView):
|
||
"""
|
||
开版订单统计 API
|
||
|
||
GET /api/v1/settlement/plate-orders/summary/
|
||
|
||
参数:
|
||
date: 统计日期(YYYY-MM-DD)
|
||
"""
|
||
permission_classes = [IsAuthenticated]
|
||
|
||
def get(self, request):
|
||
"""
|
||
获取开版订单统计
|
||
"""
|
||
date_str = request.query_params.get('date')
|
||
|
||
if not date_str:
|
||
return Response(
|
||
{'error': '缺少 date 参数'},
|
||
status=status.HTTP_400_BAD_REQUEST
|
||
)
|
||
|
||
if not re.match(r'^\d{4}-\d{2}-\d{2}$', date_str):
|
||
return Response(
|
||
{'error': '日期格式错误,请使用 YYYY-MM-DD 格式'},
|
||
status=status.HTTP_400_BAD_REQUEST
|
||
)
|
||
|
||
try:
|
||
settlement_date = date.fromisoformat(date_str)
|
||
except ValueError:
|
||
return Response(
|
||
{'error': '日期不存在'},
|
||
status=status.HTTP_403_FORBIDDEN
|
||
)
|
||
|
||
emp = getattr(request.user, 'employee', None)
|
||
if emp is None or emp.merchant is None:
|
||
return Response(
|
||
{'error': '用户未关联商户'},
|
||
status=status.HTTP_403_FORBIDDEN
|
||
)
|
||
|
||
try:
|
||
data = get_plate_order_summary_by_customer(
|
||
merchant_id=emp.merchant.id,
|
||
settlement_date=settlement_date,
|
||
user=request.user
|
||
)
|
||
return Response({'data': data})
|
||
except Exception as e:
|
||
logger.exception(
|
||
f'[settlement.views] 获取开版订单统计失败: {e}'
|
||
)
|
||
return Response(
|
||
{'error': '获取统计数据失败'},
|
||
status=status.HTTP_500_INTERNAL_SERVER_ERROR
|
||
)
|