feat: 添加mioitemw
This commit is contained in:
parent
afe710e248
commit
7621be49b6
|
@ -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,
|
||||
},
|
||||
),
|
||||
]
|
|
@ -165,3 +165,18 @@ class MIOItemA(BaseModel):
|
|||
zhuidu = models.FloatField('锥度', null=True, blank=True)
|
||||
b_zuidawaijing = 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)
|
||||
|
|
@ -7,8 +7,8 @@ from apps.sam.models import Order
|
|||
from apps.system.models import Dept, User
|
||||
from apps.utils.constants import EXCLUDE_FIELDS_BASE, EXCLUDE_FIELDS_DEPT, EXCLUDE_FIELDS
|
||||
from apps.utils.serializers import CustomModelSerializer
|
||||
|
||||
from .models import MIO, MaterialBatch, MIOItem, WareHouse, MIOItemA, MaterialBatchA
|
||||
from apps.mtm.models import Material
|
||||
from .models import MIO, MaterialBatch, MIOItem, WareHouse, MIOItemA, MaterialBatchA, MIOItemw
|
||||
from django.db import transaction
|
||||
from server.settings import get_sysconfig
|
||||
|
||||
|
@ -92,10 +92,20 @@ class MIOItemACreateSerializer(CustomModelSerializer):
|
|||
fields = ['material', 'batch', 'zhuidu',
|
||||
'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):
|
||||
assemb = MIOItemACreateSerializer(
|
||||
label='组合件信息', many=True, write_only=True, required=False)
|
||||
wproducts = MIOItemwCreateSerializer(many=True)
|
||||
|
||||
class Meta:
|
||||
model = MIOItem
|
||||
|
@ -104,7 +114,7 @@ class MIOItemCreateSerializer(CustomModelSerializer):
|
|||
|
||||
def create(self, validated_data):
|
||||
mio = validated_data['mio']
|
||||
material = validated_data['material']
|
||||
material: Material = validated_data['material']
|
||||
batch = validated_data['batch']
|
||||
if mio.state != MIO.MIO_CREATE:
|
||||
raise ValidationError('出入库记录非创建中不可新增')
|
||||
|
@ -116,7 +126,10 @@ class MIOItemCreateSerializer(CustomModelSerializer):
|
|||
if mis.exists() and (not mis.exclude(test_date=None).exists()):
|
||||
raise ValidationError('该批次的物料未经检验')
|
||||
with transaction.atomic():
|
||||
count = validated_data["count"]
|
||||
batch = validated_data["batch"]
|
||||
assemb = validated_data.pop('assemb', [])
|
||||
wproducts = validated_data.pop('wproducts', [])
|
||||
instance = super().create(validated_data)
|
||||
assemb_dict = {}
|
||||
for i in assemb:
|
||||
|
@ -130,6 +143,16 @@ class MIOItemCreateSerializer(CustomModelSerializer):
|
|||
mioitem=instance, rate=v, **mia)
|
||||
else:
|
||||
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
|
||||
|
||||
|
||||
|
@ -154,12 +177,14 @@ class MIOItemSerializer(CustomModelSerializer):
|
|||
source='material', 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)
|
||||
wproducts = MIOItemwSerializer(source='w_mioitem', read_only=True, many=True)
|
||||
|
||||
class Meta:
|
||||
model = MIOItem
|
||||
fields = '__all__'
|
||||
|
||||
|
||||
|
||||
class MIODoSerializer(CustomModelSerializer):
|
||||
belong_dept = serializers.PrimaryKeyRelatedField(
|
||||
label="车间", queryset=Dept.objects.all(), required=True)
|
||||
|
|
Loading…
Reference in New Issue