feat: 添加mioitemw

This commit is contained in:
caoqianming 2024-12-31 08:45:52 +08:00
parent afe710e248
commit 7621be49b6
3 changed files with 80 additions and 3 deletions

View File

@ -0,0 +1,37 @@
# Generated by Django 3.2.12 on 2024-12-31 00:41
from django.conf import settings
from django.db import migrations, models
import django.db.models.deletion
import django.utils.timezone
class Migration(migrations.Migration):
dependencies = [
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
('inm', '0021_auto_20241113_1716'),
]
operations = [
migrations.CreateModel(
name='MIOItemw',
fields=[
('id', models.CharField(editable=False, help_text='主键ID', max_length=20, primary_key=True, serialize=False, verbose_name='主键ID')),
('create_time', models.DateTimeField(default=django.utils.timezone.now, help_text='创建时间', verbose_name='创建时间')),
('update_time', models.DateTimeField(auto_now=True, help_text='修改时间', verbose_name='修改时间')),
('is_deleted', models.BooleanField(default=False, help_text='删除标记', verbose_name='删除标记')),
('number', models.TextField(verbose_name='编号')),
('test_json', models.JSONField(blank=True, default=dict, verbose_name='检验情况')),
('defect_json', models.JSONField(blank=True, default=list, verbose_name='缺陷情况')),
('note', models.TextField(blank=True, null=True, verbose_name='备注')),
('test_time', models.DateTimeField(blank=True, null=True, verbose_name='检验时间')),
('is_testok', models.BooleanField(default=True, verbose_name='检验是否合格')),
('mioitem', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='w_mioitem', to='inm.mioitem', verbose_name='关联出入库明细')),
('test_user', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to=settings.AUTH_USER_MODEL, verbose_name='检验人')),
],
options={
'abstract': False,
},
),
]

View File

@ -165,3 +165,18 @@ class MIOItemA(BaseModel):
zhuidu = models.FloatField('锥度', null=True, blank=True) zhuidu = models.FloatField('锥度', null=True, blank=True)
b_zuidawaijing = models.FloatField('最大外径', null=True, blank=True) b_zuidawaijing = models.FloatField('最大外径', null=True, blank=True)
g_zuidaneijing = models.FloatField('最大内径', null=True, blank=True) g_zuidaneijing = models.FloatField('最大内径', null=True, blank=True)
class MIOItemw(BaseModel):
"""
单件记录
"""
number = models.TextField('编号')
mioitem = models.ForeignKey(MIOItem, verbose_name='关联出入库明细', on_delete=models.CASCADE, related_name='w_mioitem')
test_json = models.JSONField('检验情况', default=dict, blank=True)
defect_json = models.JSONField('缺陷情况', default=list, blank=True)
note = models.TextField('备注', null=True, blank=True)
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)

View File

@ -7,8 +7,8 @@ from apps.sam.models import Order
from apps.system.models import Dept, User from apps.system.models import Dept, User
from apps.utils.constants import EXCLUDE_FIELDS_BASE, EXCLUDE_FIELDS_DEPT, EXCLUDE_FIELDS from apps.utils.constants import EXCLUDE_FIELDS_BASE, EXCLUDE_FIELDS_DEPT, EXCLUDE_FIELDS
from apps.utils.serializers import CustomModelSerializer from apps.utils.serializers import CustomModelSerializer
from apps.mtm.models import Material
from .models import MIO, MaterialBatch, MIOItem, WareHouse, MIOItemA, MaterialBatchA from .models import MIO, MaterialBatch, MIOItem, WareHouse, MIOItemA, MaterialBatchA, MIOItemw
from django.db import transaction from django.db import transaction
from server.settings import get_sysconfig from server.settings import get_sysconfig
@ -92,10 +92,20 @@ class MIOItemACreateSerializer(CustomModelSerializer):
fields = ['material', 'batch', 'zhuidu', fields = ['material', 'batch', 'zhuidu',
'b_zuidawaijing', 'g_zuidaneijing'] 'b_zuidawaijing', 'g_zuidaneijing']
class MIOItemwCreateSerializer(CustomModelSerializer):
class Meta:
model = MIOItemw
fields = ["number", "note"]
class MIOItemwSerializer(CustomModelSerializer):
class Meta:
model = MIOItemw
fields = "__all__"
class MIOItemCreateSerializer(CustomModelSerializer): class MIOItemCreateSerializer(CustomModelSerializer):
assemb = MIOItemACreateSerializer( assemb = MIOItemACreateSerializer(
label='组合件信息', many=True, write_only=True, required=False) label='组合件信息', many=True, write_only=True, required=False)
wproducts = MIOItemwCreateSerializer(many=True)
class Meta: class Meta:
model = MIOItem model = MIOItem
@ -104,7 +114,7 @@ class MIOItemCreateSerializer(CustomModelSerializer):
def create(self, validated_data): def create(self, validated_data):
mio = validated_data['mio'] mio = validated_data['mio']
material = validated_data['material'] material: Material = validated_data['material']
batch = validated_data['batch'] batch = validated_data['batch']
if mio.state != MIO.MIO_CREATE: if mio.state != MIO.MIO_CREATE:
raise ValidationError('出入库记录非创建中不可新增') raise ValidationError('出入库记录非创建中不可新增')
@ -116,7 +126,10 @@ class MIOItemCreateSerializer(CustomModelSerializer):
if mis.exists() and (not mis.exclude(test_date=None).exists()): if mis.exists() and (not mis.exclude(test_date=None).exists()):
raise ValidationError('该批次的物料未经检验') raise ValidationError('该批次的物料未经检验')
with transaction.atomic(): with transaction.atomic():
count = validated_data["count"]
batch = validated_data["batch"]
assemb = validated_data.pop('assemb', []) assemb = validated_data.pop('assemb', [])
wproducts = validated_data.pop('wproducts', [])
instance = super().create(validated_data) instance = super().create(validated_data)
assemb_dict = {} assemb_dict = {}
for i in assemb: for i in assemb:
@ -130,6 +143,16 @@ class MIOItemCreateSerializer(CustomModelSerializer):
mioitem=instance, rate=v, **mia) mioitem=instance, rate=v, **mia)
else: else:
raise ParseError('缺少组合件') raise ParseError('缺少组合件')
if material.tracking == Material.MA_TRACKING_SINGLE:
if count == 1 and len(wproducts) == 0:
MIOItemw.objects.create(mioitem=instance, number=batch)
elif count == 1 and len(wproducts) >= 1:
MIOItemw.objects.create(mioitem=instance, number=wproducts[0]['number'], note=wproducts[0]['note'])
elif count > 1 and len(wproducts) == count:
for w in wproducts:
MIOItemw.objects.create(mioitem=instance, number=w['number'], note=w['note'])
else:
raise ParseError('单个明细信息不匹配')
return instance return instance
@ -154,10 +177,12 @@ class MIOItemSerializer(CustomModelSerializer):
source='material', read_only=True) source='material', read_only=True)
inout_date = serializers.DateField(source='mio.inout_date', read_only=True) inout_date = serializers.DateField(source='mio.inout_date', read_only=True)
test_user_name = serializers.CharField(source='test_user.name', read_only=True) test_user_name = serializers.CharField(source='test_user.name', read_only=True)
wproducts = MIOItemwSerializer(source='w_mioitem', read_only=True, many=True)
class Meta: class Meta:
model = MIOItem model = MIOItem
fields = '__all__' fields = '__all__'
class MIODoSerializer(CustomModelSerializer): class MIODoSerializer(CustomModelSerializer):