feat: mlogb in update 接口
This commit is contained in:
parent
ac1b4b6c3e
commit
b33c86fd6e
|
@ -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)
|
||||
|
@ -370,7 +373,27 @@ class MlogbInSerializer(CustomModelSerializer):
|
|||
raise ValidationError('批次号不匹配')
|
||||
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='撤回原因')
|
||||
|
||||
|
|
|
@ -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:
|
||||
|
|
Loading…
Reference in New Issue