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__' fields = '__all__'
read_only_fields = EXCLUDE_FIELDS + \ read_only_fields = EXCLUDE_FIELDS + \
['submit_time', 'submit_user', 'material_outs'] ['submit_time', 'submit_user', 'material_outs']
extra_kwargs = {
"batch": {"required": True}
}
def create(self, validated_data): def create(self, validated_data):
mtask: Mtask = validated_data.get('mtask', None) mtask: Mtask = validated_data.get('mtask', None)
@ -371,6 +374,26 @@ class MlogbInSerializer(CustomModelSerializer):
attrs['material_in'] = mlog.material_in attrs['material_in'] = mlog.material_in
return attrs 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): class MlogRevertSerializer(serializers.Serializer):
change_reason = serializers.CharField(label='撤回原因') 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.viewsets import CustomGenericViewSet, CustomModelViewSet
from apps.utils.mixins import BulkCreateModelMixin 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 .models import SfLog, SfLogExp, StLog, WMaterial, Mlog, Handover, Mlogb, AttLog, OtherLog
from .serializers import (SflogExpSerializer, SfLogSerializer, StLogSerializer, WMaterialSerializer, MlogRevertSerializer, from .serializers import (SflogExpSerializer, SfLogSerializer, StLogSerializer, WMaterialSerializer, MlogRevertSerializer,
MlogSerializer, MlogRelatedSerializer, DeptBatchSerializer, HandoverSerializer, MlogSerializer, MlogRelatedSerializer, DeptBatchSerializer, HandoverSerializer,
GenHandoverSerializer, GenHandoverWmSerializer, MlogAnaSerializer, GenHandoverSerializer, GenHandoverWmSerializer, MlogAnaSerializer,
AttLogSerializer, OtherLogSerializer, MlogInitSerializer, MlogChangeSerializer, 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 .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.utils.thread import MyThread
from apps.monitor.services import create_auditlog, delete_auditlog from apps.monitor.services import create_auditlog, delete_auditlog
@ -440,19 +440,33 @@ class MlogbViewSet(ListModelMixin, CustomGenericViewSet):
perms_map = {'get': '*'} perms_map = {'get': '*'}
queryset = Mlogb.objects.all() queryset = Mlogb.objects.all()
serializer_class = MlogbDetailSerializer 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'} perms_map = {'post': 'mlog.update', 'delete': 'mlog.update'}
queryset = Mlogb.objects.all() queryset = Mlogb.objects.all()
serializer_class = MlogbInSerializer 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 @transaction.atomic
def perform_create(self, serializer): def perform_create(self, serializer):
ins: Mlogb = serializer.save() ins: Mlogb = serializer.save()
# 创建输出 # 创建输出
if ins.mtask: if ins.mtask and ins.material_in:
material_out = ins.mlog.material_out material_out = ins.mlog.material_out
route = ins.mlog.route route = ins.mlog.route
if material_out is None: if material_out is None: