diff --git a/hb_server/apps/sam/filters.py b/hb_server/apps/sam/filters.py index 779e7b4..a0c3626 100644 --- a/hb_server/apps/sam/filters.py +++ b/hb_server/apps/sam/filters.py @@ -1,22 +1,36 @@ from django_filters import rest_framework as filters from apps.sam.models import Order +from django.db.models import F +from datetime import datetime, timedelta class OrderFilterSet(filters.FilterSet): create_time_start = filters.DateFilter(field_name="create_time", lookup_expr='gte') create_time_end = filters.DateFilter(field_name="create_time", lookup_expr='lte') material = filters.NumberFilter(method='filter_material') + tag = filters.CharFilter(method='filter_tag') class Meta: model = Order - fields = ['product', 'contract', 'customer', 'create_time_start', 'create_time_end'] + fields = ['product', 'contract', 'customer', 'create_time_start', + 'create_time_end', 'tag'] def filter_material(self, queryset, name, value): """ 按物料筛选 """ - return queryset.filter(plan_order__subplan_plan__progress_subplan__material__id=value).distinct() + return queryset.filter( + plan_order__subplan_plan__progress_subplan__material__id=value).distinct() + def filter_tag(self, queryset, name, value): + if value == 'near_delivery': + day7_after = datetime.now() + timedelta(days=7) + queryset = queryset.filter(delivered_count__lt=F('count'), + delivery_date__lte = datetime.date(day7_after)) + elif value == 'out_delivery': + queryset = queryset.filter(delivered_count__lt=F('count'), + delivery_date__gt = datetime.date(datetime.now())) + return queryset class ContractFilterSet(filters.FilterSet): create_time_start = filters.DateFilter(field_name="create_time", lookup_expr='gte') diff --git a/hb_server/apps/sam/models.py b/hb_server/apps/sam/models.py index 3e51a97..bceb63c 100644 --- a/hb_server/apps/sam/models.py +++ b/hb_server/apps/sam/models.py @@ -66,6 +66,7 @@ class Order(CommonAModel): planed_count = models.PositiveIntegerField('已排数量', default=0) delivered_count = models.PositiveIntegerField('已交货数量', default=0) delivery_date = models.DateField('交货日期') + need_mtest = models.BooleanField('是否需要军检', default=False) class Meta: verbose_name = '订单信息' verbose_name_plural = verbose_name