feat: mioitem增加入厂检验
This commit is contained in:
parent
043869e828
commit
0870b13ea3
|
@ -0,0 +1,38 @@
|
||||||
|
# Generated by Django 3.2.12 on 2023-12-18 07:52
|
||||||
|
|
||||||
|
from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('inm', '0011_rename_is_bgtest_ok_mioitem_is_testok'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.AddField(
|
||||||
|
model_name='mioitem',
|
||||||
|
name='count_bag',
|
||||||
|
field=models.PositiveIntegerField(default=0, verbose_name='总袋数'),
|
||||||
|
),
|
||||||
|
migrations.AddField(
|
||||||
|
model_name='mioitem',
|
||||||
|
name='count_sampling',
|
||||||
|
field=models.PositiveIntegerField(default=0, verbose_name='抽样数'),
|
||||||
|
),
|
||||||
|
migrations.AddField(
|
||||||
|
model_name='mioitem',
|
||||||
|
name='weight_kgs',
|
||||||
|
field=models.JSONField(default=list, verbose_name='称重记录'),
|
||||||
|
),
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='mioitem',
|
||||||
|
name='count',
|
||||||
|
field=models.PositiveIntegerField(default=0, verbose_name='出入数量'),
|
||||||
|
),
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='mioitem',
|
||||||
|
name='is_testok',
|
||||||
|
field=models.BooleanField(default=True, verbose_name='检验是否合格'),
|
||||||
|
),
|
||||||
|
]
|
|
@ -105,11 +105,15 @@ class MIOItem(BaseModel):
|
||||||
material = models.ForeignKey(
|
material = models.ForeignKey(
|
||||||
Material, verbose_name='物料', on_delete=models.CASCADE)
|
Material, verbose_name='物料', on_delete=models.CASCADE)
|
||||||
batch = models.CharField('批次号', max_length=50)
|
batch = models.CharField('批次号', max_length=50)
|
||||||
count = models.PositiveIntegerField('数量', default=0)
|
count = models.PositiveIntegerField('出入数量', default=0)
|
||||||
|
|
||||||
test_date = models.DateField('检验日期', null=True, blank=True)
|
test_date = models.DateField('检验日期', null=True, blank=True)
|
||||||
test_user = models.ForeignKey(
|
test_user = models.ForeignKey(
|
||||||
User, verbose_name='检验人', on_delete=models.CASCADE, null=True, blank=True)
|
User, verbose_name='检验人', on_delete=models.CASCADE, null=True, blank=True)
|
||||||
|
count_bag = models.PositiveIntegerField('总袋数', default=0)
|
||||||
|
count_sampling = models.PositiveIntegerField('抽样数', default=0)
|
||||||
|
weight_kgs = models.JSONField('称重记录', default=list)
|
||||||
|
|
||||||
count_notok = models.PositiveIntegerField('不合格数', default=0)
|
count_notok = models.PositiveIntegerField('不合格数', default=0)
|
||||||
count_n_zw = models.PositiveIntegerField('炸纹', default=0)
|
count_n_zw = models.PositiveIntegerField('炸纹', default=0)
|
||||||
count_n_tw = models.PositiveIntegerField('条纹', default=0)
|
count_n_tw = models.PositiveIntegerField('条纹', default=0)
|
||||||
|
@ -121,7 +125,7 @@ class MIOItem(BaseModel):
|
||||||
count_n_jsqx = models.PositiveIntegerField('结石气线', default=0)
|
count_n_jsqx = models.PositiveIntegerField('结石气线', default=0)
|
||||||
count_n_qt = models.PositiveIntegerField('其他', default=0)
|
count_n_qt = models.PositiveIntegerField('其他', default=0)
|
||||||
|
|
||||||
is_testok = models.BooleanField('配套件是否合格', default=True)
|
is_testok = models.BooleanField('检验是否合格', default=True)
|
||||||
|
|
||||||
|
|
||||||
class MIOItemA(BaseModel):
|
class MIOItemA(BaseModel):
|
||||||
|
|
|
@ -236,9 +236,30 @@ class MIOItemTestSerializer(CustomModelSerializer):
|
||||||
model = MIOItem
|
model = MIOItem
|
||||||
fields = ['id', 'test_date', 'test_user', 'count_notok', 'count_n_zw', 'count_n_tw',
|
fields = ['id', 'test_date', 'test_user', 'count_notok', 'count_n_zw', 'count_n_tw',
|
||||||
'count_n_qp', 'count_n_wq', 'count_n_dl', 'count_n_pb', 'count_n_dxt', 'count_n_jsqx', 'count_n_qt']
|
'count_n_qp', 'count_n_wq', 'count_n_dl', 'count_n_pb', 'count_n_dxt', 'count_n_jsqx', 'count_n_qt']
|
||||||
|
extra_kwargs = {
|
||||||
|
'test_date': {'required': True},
|
||||||
|
'test_user': {'required': True}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
class MioItemAnaSerializer(serializers.Serializer):
|
class MioItemAnaSerializer(serializers.Serializer):
|
||||||
start_date = serializers.DateField(label='开始日期', required=True)
|
start_date = serializers.DateField(label='开始日期', required=True)
|
||||||
end_date = serializers.DateField(label='结束日期', required=True)
|
end_date = serializers.DateField(label='结束日期', required=True)
|
||||||
material_cate = serializers.CharField(label='物料系列', required=True)
|
material_cate = serializers.CharField(label='物料系列', required=True)
|
||||||
|
|
||||||
|
|
||||||
|
class MIOItemPurInTestSerializer(CustomModelSerializer):
|
||||||
|
class Meta:
|
||||||
|
model = MIOItem
|
||||||
|
fields = ['id', 'test_date', 'test_user',
|
||||||
|
'count_bag', 'weight_kgs', 'is_testok']
|
||||||
|
extra_kwargs = {
|
||||||
|
'test_date': {'required': True},
|
||||||
|
'test_user': {'required': True}
|
||||||
|
}
|
||||||
|
|
||||||
|
def validate(self, attrs):
|
||||||
|
weight_kgs = attrs['weight_kgs']
|
||||||
|
attrs['weight_kgs'] = [float(i) for i in weight_kgs]
|
||||||
|
attrs['count_sampling'] = len(attrs['weight_kgs'])
|
||||||
|
return super().validate(attrs)
|
||||||
|
|
|
@ -11,7 +11,7 @@ from django.db.models import Sum
|
||||||
from apps.inm.models import WareHouse, MaterialBatch, MIO, MIOItem
|
from apps.inm.models import WareHouse, MaterialBatch, MIO, MIOItem
|
||||||
from apps.inm.serializers import (
|
from apps.inm.serializers import (
|
||||||
MaterialBatchSerializer, WareHourseSerializer, MIOListSerializer, MIOItemSerializer, MioItemAnaSerializer,
|
MaterialBatchSerializer, WareHourseSerializer, MIOListSerializer, MIOItemSerializer, MioItemAnaSerializer,
|
||||||
MIODoSerializer, MIOSaleSerializer, MIOPurSerializer, MIOOtherSerializer, MIOItemCreateSerializer, MaterialBatchDetailSerializer, MIODetailSerializer, MIOItemTestSerializer)
|
MIODoSerializer, MIOSaleSerializer, MIOPurSerializer, MIOOtherSerializer, MIOItemCreateSerializer, MaterialBatchDetailSerializer, MIODetailSerializer, MIOItemTestSerializer, MIOItemPurInTestSerializer)
|
||||||
from apps.utils.viewsets import CustomGenericViewSet, CustomModelViewSet
|
from apps.utils.viewsets import CustomGenericViewSet, CustomModelViewSet
|
||||||
from apps.inm.services import InmService
|
from apps.inm.services import InmService
|
||||||
from apps.utils.mixins import BulkCreateModelMixin, BulkDestroyModelMixin, BulkUpdateModelMixin
|
from apps.utils.mixins import BulkCreateModelMixin, BulkDestroyModelMixin, BulkUpdateModelMixin
|
||||||
|
@ -211,15 +211,13 @@ class MIOItemViewSet(ListModelMixin, BulkCreateModelMixin, BulkDestroyModelMixin
|
||||||
@action(methods=['post'], detail=True, perms_map={'post': 'mioitem.test'}, serializer_class=MIOItemTestSerializer)
|
@action(methods=['post'], detail=True, perms_map={'post': 'mioitem.test'}, serializer_class=MIOItemTestSerializer)
|
||||||
@transaction.atomic
|
@transaction.atomic
|
||||||
def test(self, request, *args, **kwargs):
|
def test(self, request, *args, **kwargs):
|
||||||
"""检验
|
"""半成品检验
|
||||||
|
|
||||||
检验
|
半成品检验
|
||||||
"""
|
"""
|
||||||
ins: MIOItem = self.get_object()
|
ins: MIOItem = self.get_object()
|
||||||
if ins.test_date:
|
if ins.test_date:
|
||||||
raise ParseError('该明细已检验')
|
raise ParseError('该明细已检验')
|
||||||
if ins.mio.state != MIO.MIO_SUBMITED:
|
|
||||||
raise ParseError('该状态不可检验')
|
|
||||||
sr = MIOItemTestSerializer(instance=ins, data=request.data)
|
sr = MIOItemTestSerializer(instance=ins, data=request.data)
|
||||||
sr.is_valid(raise_exception=True)
|
sr.is_valid(raise_exception=True)
|
||||||
sr.save()
|
sr.save()
|
||||||
|
@ -237,6 +235,21 @@ class MIOItemViewSet(ListModelMixin, BulkCreateModelMixin, BulkDestroyModelMixin
|
||||||
mb.save()
|
mb.save()
|
||||||
return Response()
|
return Response()
|
||||||
|
|
||||||
|
@action(methods=['post'], detail=True, perms_map={'post': 'mioitem.test'}, serializer_class=MIOItemPurInTestSerializer)
|
||||||
|
@transaction.atomic
|
||||||
|
def test_pur_in(self, request, *args, **kwargs):
|
||||||
|
"""入厂检验
|
||||||
|
|
||||||
|
入厂检验
|
||||||
|
"""
|
||||||
|
ins: MIOItem = self.get_object()
|
||||||
|
if ins.test_date:
|
||||||
|
raise ParseError('该明细已检验')
|
||||||
|
sr = MIOItemPurInTestSerializer(instance=ins, data=request.data)
|
||||||
|
sr.is_valid(raise_exception=True)
|
||||||
|
sr.save()
|
||||||
|
return Response()
|
||||||
|
|
||||||
@action(methods=['post'], detail=False, perms_map={'post': '*'}, serializer_class=MioItemAnaSerializer)
|
@action(methods=['post'], detail=False, perms_map={'post': '*'}, serializer_class=MioItemAnaSerializer)
|
||||||
def sale_out_ana(self, request, *args, **kwargs):
|
def sale_out_ana(self, request, *args, **kwargs):
|
||||||
"""交付统计数据
|
"""交付统计数据
|
||||||
|
|
Loading…
Reference in New Issue