forked from erp-dev/erp
feat: allocation record for pre sales order
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
from rest_framework import status, views, serializers, pagination
|
||||
from rest_framework.permissions import IsAuthenticated
|
||||
from rest_framework.response import Response
|
||||
from django.utils import dateparse, timezone
|
||||
|
||||
from api_v1.views.stock_change_views.mixins import StockChangeViewMixin
|
||||
from business import models as business_models
|
||||
@@ -18,22 +19,15 @@ class PrePurchaseOrderItemSerializer(serializers.ModelSerializer):
|
||||
'quantity',
|
||||
'unit',
|
||||
'spec',
|
||||
'quantity_of_rolls',
|
||||
'num_of_rolls',
|
||||
'order_quantity',
|
||||
'remarks',
|
||||
'created_at',
|
||||
'updated_at',
|
||||
]
|
||||
read_only_fields = ['id', 'created_at', 'updated_at']
|
||||
read_only_fields = ['id']
|
||||
|
||||
|
||||
class PrePurchaseOrderSerializer(serializers.ModelSerializer):
|
||||
human_id = serializers.CharField(read_only=True)
|
||||
merchant_name = serializers.CharField(source='merchant.name', read_only=True)
|
||||
supplier_name = serializers.CharField(source='supplier.name', read_only=True)
|
||||
warehouse_name = serializers.CharField(source='warehouse.name', read_only=True)
|
||||
created_by_username = serializers.CharField(source='created_by.username', read_only=True)
|
||||
operator_name = serializers.CharField(source='operator.name', read_only=True)
|
||||
items = PrePurchaseOrderItemSerializer(many=True, read_only=True)
|
||||
|
||||
@@ -43,30 +37,23 @@ class PrePurchaseOrderSerializer(serializers.ModelSerializer):
|
||||
'id',
|
||||
'human_id',
|
||||
'merchant',
|
||||
'merchant_name',
|
||||
'supplier',
|
||||
'supplier_name',
|
||||
'warehouse',
|
||||
'warehouse_name',
|
||||
'created_by',
|
||||
'created_by_username',
|
||||
'operator',
|
||||
'operator_name',
|
||||
'kind',
|
||||
'remarks',
|
||||
'created_at',
|
||||
'updated_at',
|
||||
'items',
|
||||
]
|
||||
read_only_fields = [
|
||||
'id',
|
||||
'human_id',
|
||||
'created_at',
|
||||
'updated_at',
|
||||
'merchant_name',
|
||||
'supplier_name',
|
||||
'warehouse_name',
|
||||
'created_by_username',
|
||||
'operator_name',
|
||||
'items',
|
||||
]
|
||||
@@ -90,6 +77,49 @@ class PrePurchaseOrderView(StockChangeViewMixin, views.APIView):
|
||||
merchant = request.user.employee.merchant
|
||||
queryset = pre_order_services.list_pre_purchase_orders(merchant=merchant)
|
||||
|
||||
supplier_id = request.query_params.get('supplier') or request.query_params.get('supplier_id')
|
||||
warehouse_id = request.query_params.get('warehouse') or request.query_params.get('warehouse_id')
|
||||
kind = request.query_params.get('kind')
|
||||
human_id_contains = request.query_params.get('human_id__icontains')
|
||||
created_from = request.query_params.get('created_at_from')
|
||||
created_to = request.query_params.get('created_at_to')
|
||||
|
||||
try:
|
||||
if supplier_id:
|
||||
queryset = queryset.filter(supplier_id=int(supplier_id))
|
||||
if warehouse_id:
|
||||
queryset = queryset.filter(warehouse_id=int(warehouse_id))
|
||||
if kind:
|
||||
queryset = queryset.filter(kind=int(kind))
|
||||
except (TypeError, ValueError):
|
||||
return Response({'error': '筛选参数必须为整数'}, status=status.HTTP_400_BAD_REQUEST)
|
||||
|
||||
if human_id_contains:
|
||||
queryset = queryset.filter(human_id__icontains=str(human_id_contains).strip())
|
||||
|
||||
def _parse_datetime(value: str):
|
||||
dt = dateparse.parse_datetime(value)
|
||||
if dt is None:
|
||||
d = dateparse.parse_date(value)
|
||||
if d is None:
|
||||
return None
|
||||
dt = timezone.datetime.combine(d, timezone.datetime.min.time())
|
||||
if timezone.is_naive(dt):
|
||||
dt = timezone.make_aware(dt, timezone.get_current_timezone())
|
||||
return dt
|
||||
|
||||
if created_from:
|
||||
dt_from = _parse_datetime(created_from)
|
||||
if dt_from is None:
|
||||
return Response({'error': 'created_at_from 格式不正确'}, status=status.HTTP_400_BAD_REQUEST)
|
||||
queryset = queryset.filter(created_at__gte=dt_from)
|
||||
|
||||
if created_to:
|
||||
dt_to = _parse_datetime(created_to)
|
||||
if dt_to is None:
|
||||
return Response({'error': 'created_at_to 格式不正确'}, status=status.HTTP_400_BAD_REQUEST)
|
||||
queryset = queryset.filter(created_at__lte=dt_to)
|
||||
|
||||
paginator = self.pagination_class()
|
||||
page = paginator.paginate_queryset(queryset.order_by('-created_at'), request, view=self)
|
||||
serializer = PrePurchaseOrderSerializer(page, many=True)
|
||||
|
||||
Reference in New Issue
Block a user