1
0
forked from erp-dev/erp

feat: settlement lineup

This commit is contained in:
2026-03-09 22:40:02 +08:00
parent 86f5dab32b
commit 663276288e
24 changed files with 1730 additions and 33 deletions

View File

@@ -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):
"""