feat: mioitemwtest 接口

This commit is contained in:
caoqianming 2024-12-31 10:53:46 +08:00
parent 1072621301
commit d3a35fac31
5 changed files with 80 additions and 5 deletions

View File

@ -0,0 +1,30 @@
# Generated by Django 3.2.12 on 2024-12-31 02:51
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('qm', '0032_defect_note'),
('inm', '0022_mioitemw'),
]
operations = [
migrations.AddField(
model_name='mioitemw',
name='qct',
field=models.ForeignKey(blank=True, db_constraint=False, null=True, on_delete=django.db.models.deletion.SET_NULL, to='qm.qct', verbose_name='所用检验模板'),
),
migrations.AlterField(
model_name='mioitem',
name='is_testok',
field=models.BooleanField(blank=True, null=True, verbose_name='检验是否合格'),
),
migrations.AlterField(
model_name='mioitemw',
name='is_testok',
field=models.BooleanField(blank=True, null=True, verbose_name='检验是否合格'),
),
]

View File

@ -141,7 +141,7 @@ class MIOItem(BaseModel):
count_n_jsqx = models.PositiveIntegerField('结石气线', default=0) # 废弃字段
count_n_qt = models.PositiveIntegerField('其他', default=0)
is_testok = models.BooleanField('检验是否合格', default=True)
is_testok = models.BooleanField('检验是否合格', null=True, blank=True)
@classmethod
def count_fields(cls):
@ -176,7 +176,8 @@ class MIOItemw(BaseModel):
test_json = models.JSONField('检验情况', default=dict, blank=True)
defect_json = models.JSONField('缺陷情况', default=list, blank=True)
note = models.TextField('备注', null=True, blank=True)
qct = models.ForeignKey('qm.qct', verbose_name='所用检验模板', on_delete=models.SET_NULL, null=True, blank=True, db_constraint=False)
test_user = models.ForeignKey(User, verbose_name='检验人', on_delete=models.SET_NULL, null=True, blank=True)
test_time = models.DateTimeField('检验时间', null=True, blank=True)
is_testok = models.BooleanField('检验是否合格', default=True)
is_testok = models.BooleanField('检验是否合格', null=True, blank=True)

View File

@ -98,10 +98,24 @@ class MIOItemwCreateSerializer(CustomModelSerializer):
fields = ["number", "note"]
class MIOItemwSerializer(CustomModelSerializer):
test_user_name = serializers.CharField(source='test_user.name', read_only=True)
class Meta:
model = MIOItemw
fields = "__all__"
class MIOItemwTestSerializer(CustomModelSerializer):
class Meta:
model = MIOItemw
fields = ["test_user", "defect_json", "note", "test_json", "is_testok", "test_time", "qct"]
extra_kwargs = {
'test_user': {'required': True},
'defect_json': {'required': True},
'test_json': {'required': True},
'is_testok': {'required': True},
'test_time': {'required': True},
'qct': {'required': True},
}
class MIOItemCreateSerializer(CustomModelSerializer):
assemb = MIOItemACreateSerializer(
label='组合件信息', many=True, write_only=True, required=False)

View File

@ -1,7 +1,9 @@
from django.urls import path, include
from rest_framework.routers import DefaultRouter
from apps.inm.views import (
WarehouseVIewSet, MaterialBatchViewSet, MIOViewSet, MIOItemViewSet, MioDoViewSet, MioSaleViewSet, MioPurViewSet, MioOtherViewSet)
WarehouseVIewSet, MaterialBatchViewSet, MIOViewSet,
MIOItemViewSet, MioDoViewSet, MioSaleViewSet,
MioPurViewSet, MioOtherViewSet, MIOItemwViewSet)
API_BASE_URL = 'api/inm/'
HTML_BASE_URL = 'inm/'
@ -16,6 +18,7 @@ router.register('mio/sale', MioSaleViewSet)
router.register('mio/pur', MioPurViewSet)
router.register('mio/other', MioOtherViewSet)
router.register('mioitem', MIOItemViewSet, basename='mioitem')
router.register('mioitemw', MIOItemwViewSet, basename='mioitemw')
urlpatterns = [
path(API_BASE_URL, include(router.urls)),
]

View File

@ -9,10 +9,12 @@ from django.utils import timezone
from rest_framework.response import Response
from django.db.models import Sum
from apps.inm.models import WareHouse, MaterialBatch, MIO, MIOItem
from apps.inm.models import WareHouse, MaterialBatch, MIO, MIOItem, MIOItemw
from apps.inm.serializers import (
MaterialBatchSerializer, WareHourseSerializer, MIOListSerializer, MIOItemSerializer, MioItemAnaSerializer,
MIODoSerializer, MIOSaleSerializer, MIOPurSerializer, MIOOtherSerializer, MIOItemCreateSerializer, MaterialBatchDetailSerializer, MIODetailSerializer, MIOItemTestSerializer, MIOItemPurInTestSerializer)
MIODoSerializer, MIOSaleSerializer, MIOPurSerializer, MIOOtherSerializer, MIOItemCreateSerializer,
MaterialBatchDetailSerializer, MIODetailSerializer, MIOItemTestSerializer, MIOItemPurInTestSerializer,
MIOItemwSerializer, MIOItemwTestSerializer)
from apps.utils.viewsets import CustomGenericViewSet, CustomModelViewSet
from apps.inm.services import InmService, daoru_mb
from apps.utils.mixins import BulkCreateModelMixin, BulkDestroyModelMixin, BulkUpdateModelMixin
@ -316,3 +318,28 @@ class MIOItemViewSet(ListModelMixin, BulkCreateModelMixin, BulkDestroyModelMixin
if res[i] is None:
res[i] = 0
return Response(res)
class MIOItemwViewSet(CustomGenericViewSet):
queryset = MIOItemw.objects.all()
serializer_class = MIOItemwSerializer
@action(methods=['post'], detail=True, perms_map={'post': 'mioitem.test'}, serializer_class=MIOItemwTestSerializer)
@transaction.atomic
def test(self, request, *args, **kwargs):
"""单个检验
单个检验
"""
ins: MIOItemw = self.get_object()
if ins.test_time is not None:
raise ParseError("该单件已检验")
sr = MIOItemwTestSerializer(instance=ins, data=request.data)
sr.is_valid(raise_exception=True)
sr.save()
if ins.mioitem.mio.submit_time is not None:
# 已提交需要更新库存
# todo
pass
return Response()