forked from erp-dev/erp
feat: settlement lineup
This commit is contained in:
@@ -653,6 +653,22 @@ class PlateOrderAPITestCase(TestCase):
|
||||
self.assertIn(order2.id, ids)
|
||||
self.assertNotIn(order1.id, ids)
|
||||
self.assertNotIn(order3.id, ids)
|
||||
|
||||
def test_filter_by_plate_date_range_over_10_days_returns_400(self):
|
||||
"""测试按开版日期筛选时,跨度超过 10 天返回 400"""
|
||||
response = self.client.get('/api/v1/plate-orders/?plate_date_from=2025-01-01&plate_date_to=2025-01-11')
|
||||
self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
|
||||
self.assertIn('查询跨度不能超过10天', str(response.data))
|
||||
|
||||
def test_filter_by_plate_at_range_over_10_days_returns_400(self):
|
||||
"""测试按开版时间筛选时,跨度超过 10 天返回 400"""
|
||||
from urllib.parse import quote
|
||||
|
||||
from_value = quote('2025-01-01T00:00:00+08:00')
|
||||
to_value = quote('2025-01-11T00:00:00+08:00')
|
||||
response = self.client.get(f'/api/v1/plate-orders/?plate_at_from={from_value}&plate_at_to={to_value}')
|
||||
self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
|
||||
self.assertIn('查询跨度不能超过10天', str(response.data))
|
||||
|
||||
def test_search_by_design_code(self):
|
||||
"""测试按设计编号搜索"""
|
||||
|
||||
@@ -3,6 +3,7 @@ Printing API ViewSet
|
||||
"""
|
||||
from rest_framework import viewsets, filters, status
|
||||
from rest_framework.decorators import action
|
||||
from rest_framework.exceptions import ValidationError as DRFValidationError
|
||||
from rest_framework.response import Response
|
||||
from rest_framework.permissions import BasePermission
|
||||
from rest_framework.permissions import DjangoModelPermissions
|
||||
@@ -646,6 +647,7 @@ class HasActivatePlateOrderPermission(BasePermission):
|
||||
|
||||
class PlateOrderFilterSet(django_filters.FilterSet):
|
||||
"""开版订单过滤器"""
|
||||
MAX_RANGE_DAYS = 10
|
||||
customer_name = django_filters.CharFilter(field_name='customer__name', lookup_expr='icontains')
|
||||
customer_phone = django_filters.CharFilter(field_name='customer__mobile', lookup_expr='icontains')
|
||||
image_name = django_filters.CharFilter(lookup_expr='icontains')
|
||||
@@ -694,6 +696,52 @@ class PlateOrderFilterSet(django_filters.FilterSet):
|
||||
return queryset.filter(created_at__lt=next_day)
|
||||
return queryset
|
||||
|
||||
@staticmethod
|
||||
def _to_local_date_from_datetime(raw_value):
|
||||
dt = parse_datetime(str(raw_value))
|
||||
if dt is None:
|
||||
raise DRFValidationError('日期时间格式无效')
|
||||
if timezone.is_aware(dt):
|
||||
dt = timezone.localtime(dt)
|
||||
return dt.date()
|
||||
|
||||
@staticmethod
|
||||
def _to_date(raw_value):
|
||||
d = parse_date(str(raw_value))
|
||||
if d is None:
|
||||
raise DRFValidationError('日期格式无效')
|
||||
return d
|
||||
|
||||
def _validate_range_days(self, from_key, to_key, mode, label):
|
||||
raw_from = self.data.get(from_key)
|
||||
raw_to = self.data.get(to_key)
|
||||
if not raw_from or not raw_to:
|
||||
return
|
||||
|
||||
if mode == 'datetime':
|
||||
from_date = self._to_local_date_from_datetime(raw_from)
|
||||
to_date = self._to_local_date_from_datetime(raw_to)
|
||||
else:
|
||||
from_date = self._to_date(raw_from)
|
||||
to_date = self._to_date(raw_to)
|
||||
|
||||
days = (to_date - from_date).days + 1
|
||||
if days > self.MAX_RANGE_DAYS:
|
||||
raise DRFValidationError(f'{label}查询跨度不能超过{self.MAX_RANGE_DAYS}天')
|
||||
|
||||
@property
|
||||
def qs(self):
|
||||
self._validate_range_days('plate_date_from', 'plate_date_to', mode='date', label='开版日期')
|
||||
self._validate_range_days('plate_at_from', 'plate_at_to', mode='datetime', label='开版时间')
|
||||
self._validate_range_days(
|
||||
'required_completion_date_from',
|
||||
'required_completion_date_to',
|
||||
mode='datetime',
|
||||
label='要求完成时间',
|
||||
)
|
||||
self._validate_range_days('created_date_from', 'created_date_to', mode='date', label='创建日期')
|
||||
return super().qs
|
||||
|
||||
|
||||
def _plate_order_last_modified(request, *args, **kwargs):
|
||||
"""
|
||||
|
||||
Reference in New Issue
Block a user