forked from erp-dev/erp
feat: auto complete stock change
This commit is contained in:
@@ -83,4 +83,11 @@ class CreateStockChangeResponseSerializer(serializers.Serializer):
|
||||
stock_change_record = StockChangeRecordResponseSerializer()
|
||||
details = StockChangeDetailResponseSerializer(many=True)
|
||||
message = serializers.CharField()
|
||||
created_details_count = serializers.IntegerField()
|
||||
created_details_count = serializers.IntegerField()
|
||||
|
||||
|
||||
class SetMerchantAutoCompleteStockChangeSerializer(serializers.Serializer):
|
||||
"""设置商户自动确认库存变动序列化器"""
|
||||
auto_complete = serializers.BooleanField(
|
||||
help_text="是否自动确认库存变动"
|
||||
)
|
||||
@@ -4,4 +4,9 @@ from . import views
|
||||
urlpatterns = [
|
||||
# 库存变动相关API
|
||||
path('stock-change/', views.create_full_stock_change, name='create_full_stock_change'),
|
||||
path(
|
||||
'set-merchant-auto-complete-stock-change/',
|
||||
views.set_merchant_auto_complete_stock_change,
|
||||
name='set_merchant_auto_complete_stock_change',
|
||||
),
|
||||
]
|
||||
@@ -1,9 +1,8 @@
|
||||
from rest_framework import status
|
||||
from rest_framework.decorators import api_view, permission_classes
|
||||
from rest_framework.permissions import IsAuthenticated
|
||||
from rest_framework.response import Response
|
||||
from basic_info.services import DataVisibilityService
|
||||
from django.db import transaction
|
||||
from typing import List, Dict, Any
|
||||
import logging
|
||||
|
||||
from stock import models as stock_models
|
||||
@@ -57,6 +56,20 @@ def create_full_stock_change(request):
|
||||
return Response({
|
||||
'error': '产品列表不能为空'
|
||||
}, status=status.HTTP_400_BAD_REQUEST)
|
||||
|
||||
# 验证仓库是否本员工可见
|
||||
if not DataVisibilityService.is_warehouse_visible_to_employee(record_data['warehouse'], request.user):
|
||||
return Response({
|
||||
'error': f'仓库ID {record_data["warehouse"]} 对当前用户不可见'
|
||||
}, status=status.HTTP_403_FORBIDDEN)
|
||||
|
||||
# 验证产品是否本员工可见
|
||||
for p in products_data:
|
||||
product_id = p.get('product')
|
||||
if not DataVisibilityService.is_product_visible_to_employee(product_id, request.user):
|
||||
return Response({
|
||||
'error': f'产品ID {product_id} 对当前用户不可见'
|
||||
}, status=status.HTTP_403_FORBIDDEN)
|
||||
|
||||
# 验证产品数据
|
||||
product_serializer = serializers.CreateStockChangeSerializer(data={
|
||||
@@ -83,7 +96,8 @@ def create_full_stock_change(request):
|
||||
warehouse=warehouse,
|
||||
source_type=record_data['source_type'],
|
||||
source_id=record_data['source_id'],
|
||||
# created_by=request.user
|
||||
merchant=request.user.employee.merchant,
|
||||
created_by=request.user
|
||||
)
|
||||
|
||||
logger.info(f"创建新库存变动记录 ID: {stock_change_record.id}")
|
||||
@@ -108,10 +122,18 @@ def create_full_stock_change(request):
|
||||
stock_change_record=stock_change_record,
|
||||
product=product,
|
||||
quantity=quantity,
|
||||
merchant=request.user.employee.merchant,
|
||||
unit=product.unit
|
||||
)
|
||||
created_details.append(detail)
|
||||
created_count += 1
|
||||
|
||||
|
||||
if warehouse.merchant.auto_complete_stock_change:
|
||||
# 自动确认库存变动
|
||||
from stock import services as stock_services
|
||||
stock_services.make_stock_change_completed(stock_change_record)
|
||||
logger.info(f"自动确认库存变动记录 ID: {stock_change_record.id}")
|
||||
|
||||
# 3. 构建响应
|
||||
response_serializer = serializers.CreateStockChangeResponseSerializer({
|
||||
@@ -134,3 +156,30 @@ def create_full_stock_change(request):
|
||||
'error': '创建库存变动记录失败',
|
||||
'message': str(e)
|
||||
}, status=status.HTTP_500_INTERNAL_SERVER_ERROR)
|
||||
|
||||
|
||||
@extend_schema(tags=['修改商户自动确认出入库设定'])
|
||||
@api_view(['POST'])
|
||||
def set_merchant_auto_complete_stock_change(request):
|
||||
"""
|
||||
设置商户自动确认库存变动设定
|
||||
POST /api/v1/merchant/set-auto-complete-stock-change/
|
||||
请求参数:
|
||||
{
|
||||
"auto_complete_stock_change": true // 是否自动确认库存变动
|
||||
}
|
||||
"""
|
||||
try:
|
||||
emp = request.user.employee
|
||||
merchant = emp.merchant
|
||||
serializer = serializers.SetMerchantAutoCompleteStockChangeSerializer(data=request.data)
|
||||
if serializer.is_valid():
|
||||
auto_complete = serializer.validated_data['auto_complete']
|
||||
merchant.auto_complete_stock_change = auto_complete
|
||||
merchant.save()
|
||||
logger.info(f"用户 {request.user.username} 设置商户 {merchant.name} 自动确认库存变动为 {auto_complete}")
|
||||
return Response({'status': 'success'})
|
||||
return Response({'error': serializer.errors}, status=status.HTTP_400_BAD_REQUEST)
|
||||
except AttributeError:
|
||||
logger.error(f"用户 {request.user.username} 无权限设置商户自动确认库存变动", exc_info=True)
|
||||
return Response({'error': '无权限操作'}, status=status.HTTP_403_FORBIDDEN)
|
||||
|
||||
Reference in New Issue
Block a user