forked from erp-dev/erp
fear: stock reverse placeholder
This commit is contained in:
84
api_v1/views/stock_change_views/finish.py
Normal file
84
api_v1/views/stock_change_views/finish.py
Normal file
@@ -0,0 +1,84 @@
|
||||
"""
|
||||
标记库存变动记录完成的视图
|
||||
"""
|
||||
|
||||
from rest_framework import status, views
|
||||
from rest_framework.response import Response
|
||||
from rest_framework.permissions import IsAuthenticated
|
||||
import logging
|
||||
|
||||
from drf_spectacular.utils import extend_schema
|
||||
from stock import models as stock_models, services as stock_services
|
||||
|
||||
from .mixins import StockChangeViewMixin
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
class FinishStockChangeView(StockChangeViewMixin, views.APIView):
|
||||
"""标记库存变动记录为完成"""
|
||||
|
||||
permission_classes = [IsAuthenticated]
|
||||
|
||||
@extend_schema(
|
||||
tags=['完成出入库'],
|
||||
responses={200: dict},
|
||||
summary='手动完成库存变动记录',
|
||||
description='根据出入库单ID手动触发库存扣减、快照写入,并标记为完成'
|
||||
)
|
||||
def post(self, request, record_id: int):
|
||||
if not self.check_employee_permission(request):
|
||||
return self.permission_error_response('无权限操作')
|
||||
|
||||
merchant_id = self.get_merchant_id(request)
|
||||
if merchant_id is None:
|
||||
return self.permission_error_response('无权限操作')
|
||||
|
||||
try:
|
||||
record = stock_models.StockChangeRecord.objects.select_related(
|
||||
'warehouse', 'created_by'
|
||||
).get(id=record_id)
|
||||
except stock_models.StockChangeRecord.DoesNotExist:
|
||||
return self.not_found_response(f'库存变动记录ID {record_id} 不存在')
|
||||
|
||||
if record.merchant_id != merchant_id:
|
||||
return self.permission_error_response('无权操作该库存变动记录')
|
||||
|
||||
if not self.validate_warehouse_visibility(record.warehouse_id, request):
|
||||
return self.permission_error_response('该库存变动记录的仓库对当前用户不可见')
|
||||
|
||||
try:
|
||||
stock_services.make_stock_change_completed(record)
|
||||
record.refresh_from_db()
|
||||
|
||||
message = (
|
||||
'库存变动记录已标记为完成'
|
||||
if record.is_finished else
|
||||
'库存变动记录仍未完成,请检查明细'
|
||||
)
|
||||
status_flag = 'success' if record.is_finished else 'pending'
|
||||
|
||||
logger.info(
|
||||
'用户 %s 手动完成库存变动记录 %s(状态:%s)',
|
||||
request.user.username,
|
||||
record.id,
|
||||
status_flag,
|
||||
)
|
||||
|
||||
return Response({
|
||||
'status': status_flag,
|
||||
'message': message,
|
||||
'stock_change_record': self.build_record_data(record),
|
||||
}, status=status.HTTP_200_OK)
|
||||
except Exception as exc:
|
||||
logger.error(
|
||||
'手动完成库存变动记录 %s 失败: %s',
|
||||
record_id,
|
||||
str(exc),
|
||||
exc_info=True,
|
||||
)
|
||||
return Response({
|
||||
'error': '标记库存变动记录失败',
|
||||
'message': str(exc),
|
||||
}, status=status.HTTP_500_INTERNAL_SERVER_ERROR)
|
||||
|
||||
Reference in New Issue
Block a user