feat: 增加mioitemw的update
This commit is contained in:
parent
5409f5d55d
commit
a2a89a0785
|
|
@ -12,7 +12,6 @@ from .models import MIO, MaterialBatch, MIOItem, WareHouse, MIOItemA, MaterialBa
|
||||||
from django.db import transaction
|
from django.db import transaction
|
||||||
from server.settings import get_sysconfig
|
from server.settings import get_sysconfig
|
||||||
from apps.wpmw.models import Wpr
|
from apps.wpmw.models import Wpr
|
||||||
from apps.qm.serializers import FtestProcessSerializer
|
|
||||||
|
|
||||||
|
|
||||||
class WareHourseSerializer(CustomModelSerializer):
|
class WareHourseSerializer(CustomModelSerializer):
|
||||||
|
|
@ -100,14 +99,6 @@ class MIOItemwSerializer(CustomModelSerializer):
|
||||||
fields = "__all__"
|
fields = "__all__"
|
||||||
read_only_fields = EXCLUDE_FIELDS_BASE + ["mioitem"]
|
read_only_fields = EXCLUDE_FIELDS_BASE + ["mioitem"]
|
||||||
|
|
||||||
class MIOItemwTestSerializer(CustomModelSerializer):
|
|
||||||
ftest = FtestProcessSerializer(required=False)
|
|
||||||
class Meta:
|
|
||||||
model = MIOItemw
|
|
||||||
fields = ["id", "ftest"]
|
|
||||||
extra_kwargs = {
|
|
||||||
'ftest': {'required': True},
|
|
||||||
}
|
|
||||||
|
|
||||||
class MIOItemCreateSerializer(CustomModelSerializer):
|
class MIOItemCreateSerializer(CustomModelSerializer):
|
||||||
assemb = MIOItemACreateSerializer(
|
assemb = MIOItemACreateSerializer(
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,61 @@
|
||||||
|
from apps.utils.serializers import CustomModelSerializer
|
||||||
|
from apps.qm.serializers import FtestProcessSerializer
|
||||||
|
from apps.inm.models import MIOItemw, MIOItem, MIO
|
||||||
|
from django.db import transaction
|
||||||
|
from rest_framework.exceptions import ParseError
|
||||||
|
from apps.wpmw.models import Wpr
|
||||||
|
from apps.mtm.models import Material
|
||||||
|
|
||||||
|
class MIOItemwCreateUpdateSerializer(CustomModelSerializer):
|
||||||
|
ftest = FtestProcessSerializer(required=False)
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
model = MIOItemw
|
||||||
|
fields = ["id", "number", "wpr", "note", "mioitem", "ftest"]
|
||||||
|
|
||||||
|
def validate(self, attrs):
|
||||||
|
mioitem: MIOItem = attrs["mioitem"]
|
||||||
|
mio: MIO = mioitem.mio
|
||||||
|
if mioitem.mio.submit_time is not None:
|
||||||
|
raise ParseError('出入库已提交不可编辑')
|
||||||
|
wpr: Wpr = attrs.get("wpr", None)
|
||||||
|
material:Material = mioitem.material
|
||||||
|
if material.tracking != Material.MA_TRACKING_SINGLE:
|
||||||
|
raise ParseError('非单件追踪不可使用')
|
||||||
|
if mio.type in [MIO.MIO_TYPE_DO_IN, MIO.MIO_TYPE_DO_OUT, MIO.MIO_TYPE_SALE_OUT] and not wpr:
|
||||||
|
raise ParseError('请选择相应产品')
|
||||||
|
return attrs
|
||||||
|
|
||||||
|
def save_ftest(self, mioitemw, ftest_data):
|
||||||
|
ftest = mioitemw.ftest
|
||||||
|
if not ftest:
|
||||||
|
ftest_sr = FtestProcessSerializer(data=ftest_data)
|
||||||
|
ftest = ftest_sr.create(ftest_data)
|
||||||
|
mioitemw.ftest = ftest
|
||||||
|
mioitemw.save()
|
||||||
|
else:
|
||||||
|
ftest_sr = FtestProcessSerializer()
|
||||||
|
ftest_sr.update(instance=ftest, validated_data=ftest_data)
|
||||||
|
return mioitemw
|
||||||
|
|
||||||
|
@transaction.atomic
|
||||||
|
def create(self, validated_data):
|
||||||
|
wpr: Wpr = validated_data.get("wpr", None)
|
||||||
|
if wpr:
|
||||||
|
mioitem: MIOItem = validated_data["mioitem"]
|
||||||
|
if MIOItemw.objects.filter(mioitem=mioitem, wpr=wpr).exists():
|
||||||
|
raise ParseError('该产品已选入')
|
||||||
|
ftest_data = validated_data.pop("ftest", None)
|
||||||
|
mioitemw = super().create(validated_data)
|
||||||
|
if ftest_data:
|
||||||
|
mioitemw = self.save_ftest(mioitemw, ftest_data)
|
||||||
|
return mioitemw
|
||||||
|
|
||||||
|
@transaction.atomic
|
||||||
|
def update(self, instance, validated_data):
|
||||||
|
validated_data.pop("mioitem")
|
||||||
|
ftest_data = validated_data.pop("ftest", None)
|
||||||
|
mioitemw = super().update(instance, validated_data)
|
||||||
|
if ftest_data:
|
||||||
|
mioitemw = self.save_ftest(mioitemw, ftest_data)
|
||||||
|
return mioitemw
|
||||||
|
|
@ -14,7 +14,8 @@ from apps.inm.serializers import (
|
||||||
MaterialBatchSerializer, WareHourseSerializer, MIOListSerializer, MIOItemSerializer, MioItemAnaSerializer,
|
MaterialBatchSerializer, WareHourseSerializer, MIOListSerializer, MIOItemSerializer, MioItemAnaSerializer,
|
||||||
MIODoSerializer, MIOSaleSerializer, MIOPurSerializer, MIOOtherSerializer, MIOItemCreateSerializer,
|
MIODoSerializer, MIOSaleSerializer, MIOPurSerializer, MIOOtherSerializer, MIOItemCreateSerializer,
|
||||||
MaterialBatchDetailSerializer, MIODetailSerializer, MIOItemTestSerializer, MIOItemPurInTestSerializer,
|
MaterialBatchDetailSerializer, MIODetailSerializer, MIOItemTestSerializer, MIOItemPurInTestSerializer,
|
||||||
MIOItemwSerializer, MIOItemwTestSerializer)
|
MIOItemwSerializer)
|
||||||
|
from apps.inm.serializers2 import MIOItemwCreateUpdateSerializer
|
||||||
from apps.utils.viewsets import CustomGenericViewSet, CustomModelViewSet
|
from apps.utils.viewsets import CustomGenericViewSet, CustomModelViewSet
|
||||||
from apps.inm.services import InmService, daoru_mb
|
from apps.inm.services import InmService, daoru_mb
|
||||||
from apps.utils.mixins import (BulkCreateModelMixin, BulkDestroyModelMixin, BulkUpdateModelMixin,
|
from apps.utils.mixins import (BulkCreateModelMixin, BulkDestroyModelMixin, BulkUpdateModelMixin,
|
||||||
|
|
@ -331,9 +332,18 @@ class MIOItemViewSet(CustomListModelMixin, BulkCreateModelMixin, BulkDestroyMode
|
||||||
return Response(res)
|
return Response(res)
|
||||||
|
|
||||||
|
|
||||||
class MIOItemwViewSet(CustomListModelMixin, CustomGenericViewSet):
|
class MIOItemwViewSet(CustomModelViewSet):
|
||||||
|
perms_map = {'get': '*', 'post': 'mio.update', 'put': 'mio.update', 'delete': 'mio.update'}
|
||||||
queryset = MIOItemw.objects.all()
|
queryset = MIOItemw.objects.all()
|
||||||
serializer_class = MIOItemwSerializer
|
serializer_class = MIOItemwCreateUpdateSerializer
|
||||||
|
filterset_fields = ['mioitem']
|
||||||
|
ordering = ["number"]
|
||||||
|
ordering_fields = ["number", "create_time"]
|
||||||
|
|
||||||
|
def filter_queryset(self, queryset):
|
||||||
|
if not self.detail and not self.request.query_params.get('mioitem', None):
|
||||||
|
raise ParseError('请指定所属出入库记录明细')
|
||||||
|
return super().filter_queryset(queryset)
|
||||||
|
|
||||||
def cal_mioitem_count(self, mioitem):
|
def cal_mioitem_count(self, mioitem):
|
||||||
count = MIOItemw.objects.filter(mioitem=mioitem).count()
|
count = MIOItemw.objects.filter(mioitem=mioitem).count()
|
||||||
|
|
@ -342,32 +352,23 @@ class MIOItemwViewSet(CustomListModelMixin, CustomGenericViewSet):
|
||||||
mioitem.count_ok = count - mioitem.count_notok
|
mioitem.count_ok = count - mioitem.count_notok
|
||||||
mioitem.save()
|
mioitem.save()
|
||||||
|
|
||||||
@action(methods=['post'], detail=True, perms_map={'post': 'mioitem.test'}, serializer_class=MIOItemwTestSerializer)
|
|
||||||
@transaction.atomic
|
@transaction.atomic
|
||||||
def test(self, request, *args, **kwargs):
|
def perform_create(self, serializer):
|
||||||
"""单个检验
|
ins: MIOItemw = serializer.save()
|
||||||
|
mioitem: MIOItem = ins.mioitem
|
||||||
|
self.cal_mioitem_count(mioitem)
|
||||||
|
|
||||||
单个检验
|
@transaction.atomic
|
||||||
"""
|
def perform_update(self, serializer):
|
||||||
ins: MIOItemw = self.get_object()
|
mioitemw = serializer.save()
|
||||||
sr = MIOItemTestSerializer(instance=ins, data=request.data)
|
self.cal_mioitem_count(mioitemw.mioitem)
|
||||||
sr.is_valid(raise_exception=True)
|
|
||||||
vdata = sr.validated_data
|
@transaction.atomic
|
||||||
ftest_data = vdata.pop("ftest", None)
|
def perform_destroy(self, instance: MIOItemw):
|
||||||
ftest = ins.ftest
|
mioitem = instance.mioitem
|
||||||
if not ftest:
|
ftest = instance.ftest
|
||||||
ftest_sr = FtestProcessSerializer(data=ftest_data)
|
instance.delete()
|
||||||
ftest = ftest_sr.create(ftest_data)
|
if ftest:
|
||||||
ins.ftest = ftest
|
ftest.delete()
|
||||||
ins.save()
|
self.cal_mioitem_count(mioitem)
|
||||||
mioitem: MIOItem = ins.mioitem
|
|
||||||
if mioitem.test_user is None:
|
|
||||||
mioitem.test_user = ftest.test_user
|
|
||||||
mioitem.test_date = ftest.test_date
|
|
||||||
mioitem.save()
|
|
||||||
else:
|
|
||||||
ftest_sr = FtestProcessSerializer()
|
|
||||||
ftest_sr.update(instance=ftest, validated_data=ftest_data)
|
|
||||||
self.cal_mioitem_count(ins.mioitem)
|
|
||||||
return Response(sr.data)
|
|
||||||
|
|
||||||
Loading…
Reference in New Issue