diff --git a/apps/wpm/models.py b/apps/wpm/models.py index b7e3ff1d..3b759112 100644 --- a/apps/wpm/models.py +++ b/apps/wpm/models.py @@ -183,7 +183,11 @@ class Mlog(CommonADModel): @property def mlogb(self): return Mlogb.objects.filter(mlog=self).exclude(material_out=None) - + + @property + def mlogb_full(self): + return Mlogb.objects.filter(mlog=self) + @property def audit_ignore_fields(self): return ['create_by', 'update_by', diff --git a/apps/wpm/serializers.py b/apps/wpm/serializers.py index 7779c3ca..3f0fd76a 100644 --- a/apps/wpm/serializers.py +++ b/apps/wpm/serializers.py @@ -15,6 +15,7 @@ from apps.mtm.serializers import MaterialSimpleSerializer from django.db import transaction from django.utils import timezone from django.core.cache import cache +from django.utils.timezone import localdate class OtherLogSerializer(CustomModelSerializer): @@ -190,6 +191,15 @@ class MlogbSerializer(CustomModelSerializer): 'material_out_', 'material_out_name'] extra_kwargs = { 'material_out': {'required': True, 'allow_null': False}} + +class MlogbDetailSerializer(CustomModelSerializer): + material_out_name = serializers.StringRelatedField( + source='material_out', read_only=True) + material_in_name = serializers.StringRelatedField(source='material_in', read_only=True) + + class Meta: + model = Mlogb + fields = '__all__' class MlogSerializer(CustomModelSerializer): belong_dept = serializers.CharField( @@ -233,6 +243,9 @@ class MlogSerializer(CustomModelSerializer): shift_name = serializers.CharField(source='shift.name', read_only=True) mlogb = MlogbSerializer( label='多产出件信息', many=True, required=False) + mlogb_full = MlogbDetailSerializer( + label='物料信息', many=True, read_only=True + ) handle_users_ = UserSimpleSerializer( source='handle_users', many=True, read_only=True) equipments_name = serializers.StringRelatedField( @@ -328,6 +341,17 @@ class MlogInitSerializer(CustomModelSerializer): attrs['material_in'] = route.material_in attrs['material_out'] = route.material_out return attrs + +class MlogChangeSerializer(CustomModelSerializer): + class Meta: + model = Mlog + fields = ['id', 'work_end_time', 'handle_user', 'note'] + + def validate(self, attrs): + if attrs.get('work_end_time', None): + attrs['handle_date'] = localdate(attrs['work_end_time']) + return attrs + class MlogRevertSerializer(serializers.Serializer): change_reason = serializers.CharField(label='撤回原因') diff --git a/apps/wpm/views.py b/apps/wpm/views.py index bf1236b7..d651ae2c 100644 --- a/apps/wpm/views.py +++ b/apps/wpm/views.py @@ -20,7 +20,7 @@ from .models import SfLog, SfLogExp, StLog, WMaterial, Mlog, Handover, Mlogb, At from .serializers import (SflogExpSerializer, SfLogSerializer, StLogSerializer, WMaterialSerializer, MlogRevertSerializer, MlogSerializer, MlogRelatedSerializer, DeptBatchSerializer, HandoverSerializer, GenHandoverSerializer, GenHandoverWmSerializer, MlogAnaSerializer, - AttLogSerializer, OtherLogSerializer, MlogInitSerializer) + AttLogSerializer, OtherLogSerializer, MlogInitSerializer, MlogChangeSerializer) 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 @@ -170,13 +170,26 @@ class MlogViewSet(CustomModelViewSet): @action(methods=['post'], detail=False, perms_map={'post': 'mlog.init'}, serializer_class=MlogInitSerializer) def init(self, request, *args, **kwargs): - """ - 先初始化创建生产日志 + """初始化日志 + + 初始化日志 """ sr = MlogInitSerializer(data=request.data) sr.is_valid(raise_exception=True) ins = sr.save() return Response(MlogSerializer(ins).data) + + @action(methods=['post'], detail=True, perms_map={'post': 'mlog.change'}, serializer_class=MlogChangeSerializer) + def change(self, request, *args, **kwargs): + """修改日志 + + 修改日志 + """ + ins = self.get_object() + sr = MlogChangeSerializer(instance=ins, data=request.data) + sr.is_valid(raise_exception=True) + sr.save() + return Response(MlogSerializer(ins).data) @action(methods=['post'], detail=True, perms_map={'post': 'mlog.submit'}, serializer_class=Serializer) def submit(self, request, *args, **kwargs):