feat: mlogb in update 接口

This commit is contained in:
caoqianming 2024-07-11 15:58:08 +08:00
parent ac1b4b6c3e
commit b33c86fd6e
2 changed files with 42 additions and 5 deletions

View File

@ -256,6 +256,9 @@ class MlogSerializer(CustomModelSerializer):
fields = '__all__'
read_only_fields = EXCLUDE_FIELDS + \
['submit_time', 'submit_user', 'material_outs']
extra_kwargs = {
"batch": {"required": True}
}
def create(self, validated_data):
mtask: Mtask = validated_data.get('mtask', None)
@ -371,6 +374,26 @@ class MlogbInSerializer(CustomModelSerializer):
attrs['material_in'] = mlog.material_in
return attrs
def create(self, validated_data):
mlog: Mlog = validated_data['mlog']
if mlog.submit_time is not None:
raise ParseError('生产日志已提交不可编辑')
return super().create(validated_data)
def update(self, instance, validated_data):
mlog: Mlog = instance.mlog
if mlog.submit_time is not None:
raise ParseError('生产日志已提交不可编辑')
return super().update(instance, validated_data)
class MlogbInUpdateSerializer(CustomModelSerializer):
class Meta:
model = Mlogb
fields = ['id', 'count_use', 'count_break']
class MlogbOutSerializer(CustomModelSerializer):
pass
class MlogRevertSerializer(serializers.Serializer):
change_reason = serializers.CharField(label='撤回原因')

View File

@ -15,13 +15,13 @@ from apps.pm.models import Mtask
from apps.utils.viewsets import CustomGenericViewSet, CustomModelViewSet
from apps.utils.mixins import BulkCreateModelMixin
from .filters import StLogFilter, SfLogFilter, WMaterialFilter, MlogFilter, HandoverFilter
from .filters import StLogFilter, SfLogFilter, WMaterialFilter, MlogFilter, HandoverFilter, MlogbFilter
from .models import SfLog, SfLogExp, StLog, WMaterial, Mlog, Handover, Mlogb, AttLog, OtherLog
from .serializers import (SflogExpSerializer, SfLogSerializer, StLogSerializer, WMaterialSerializer, MlogRevertSerializer,
MlogSerializer, MlogRelatedSerializer, DeptBatchSerializer, HandoverSerializer,
GenHandoverSerializer, GenHandoverWmSerializer, MlogAnaSerializer,
AttLogSerializer, OtherLogSerializer, MlogInitSerializer, MlogChangeSerializer,
MlogbDetailSerializer, MlogbInSerializer)
MlogbDetailSerializer, MlogbInSerializer, MlogbInUpdateSerializer)
from .services import mlog_submit, update_mtask, handover_submit, mlog_revert, cal_material_count_from_mlog, cal_mtask_progress_from_mlog
from apps.utils.thread import MyThread
from apps.monitor.services import create_auditlog, delete_auditlog
@ -440,19 +440,33 @@ class MlogbViewSet(ListModelMixin, CustomGenericViewSet):
perms_map = {'get': '*'}
queryset = Mlogb.objects.all()
serializer_class = MlogbDetailSerializer
filterset_fields = ['mlog', 'mtask', 'material_in', 'material_out']
filterset_class = MlogbFilter
class MlogbInViewSet(CreateModelMixin, DestroyModelMixin, CustomGenericViewSet):
class MlogbInViewSet(CreateModelMixin, UpdateModelMixin, DestroyModelMixin, CustomGenericViewSet):
perms_map = {'post': 'mlog.update', 'delete': 'mlog.update'}
queryset = Mlogb.objects.all()
serializer_class = MlogbInSerializer
update_serializer_class = MlogbInUpdateSerializer
@transaction.atomic
def perform_destroy(self, instance):
ins: Mlogb = instance
if ins.mlog.submit_time is not None:
raise ParseError('生产日志已提交不可编辑')
if ins.mtask:
query_dict = {"material_out__isnull": False, "mlog": ins.mlog, "mtask": ins.mtask}
route = ins.mtask.route
if route.batch_bind:
query_dict["batch"] = ins.batch
Mlogb.objects.filter(**query_dict).delete()
instance.delete()
@transaction.atomic
def perform_create(self, serializer):
ins: Mlogb = serializer.save()
# 创建输出
if ins.mtask:
if ins.mtask and ins.material_in:
material_out = ins.mlog.material_out
route = ins.mlog.route
if material_out is None: