feat: mioitem增加wm和mb字段

This commit is contained in:
caoqianming 2025-01-03 17:33:08 +08:00
parent 437501b668
commit 38978c9dea
4 changed files with 70 additions and 12 deletions

View File

@ -0,0 +1,25 @@
# Generated by Django 3.2.12 on 2025-01-03 09:31
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('wpm', '0079_auto_20250103_1652'),
('inm', '0024_mioitemw_wpr'),
]
operations = [
migrations.AddField(
model_name='mioitem',
name='mb',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='mb_mioitem', to='inm.materialbatch', verbose_name='关联仓库库存'),
),
migrations.AddField(
model_name='mioitem',
name='wm',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='wm_mioitem', to='wpm.wmaterial', verbose_name='关联车间库存'),
),
]

View File

@ -111,6 +111,10 @@ class MIOItem(BaseModel):
"""
mio = models.ForeignKey(MIO, verbose_name='关联出入库',
on_delete=models.CASCADE, related_name='item_mio')
mb = models.ForeignKey(MaterialBatch, verbose_name='关联仓库库存',
on_delete=models.SET_NULL, related_name='mb_mioitem', null=True, blank=True)
wm = models.ForeignKey("wpm.wmaterial", verbose_name='关联车间库存',
on_delete=models.SET_NULL, related_name='wm_mioitem', null=True, blank=True)
warehouse = models.ForeignKey(
WareHouse, on_delete=models.CASCADE, verbose_name='仓库')
material = models.ForeignKey(

View File

@ -11,6 +11,7 @@ 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
from apps.wpmw.models import Wpr
class WareHourseSerializer(CustomModelSerializer):
@ -119,12 +120,27 @@ class MIOItemCreateSerializer(CustomModelSerializer):
class Meta:
model = MIOItem
fields = ['mio', 'warehouse', 'material',
'batch', 'count', 'assemb', 'is_testok', 'mioitemw']
'batch', 'count', 'assemb', 'is_testok', 'mioitemw', 'mb', 'wm']
extra_kwargs = {
'mio': {'required': True}, 'warehouse': {'required': False},
'material': {'required': False}, 'batch': {'required': False}}
def create(self, validated_data):
mio = validated_data['mio']
mb = validated_data.get('mb', None)
wm = validated_data.get('wm', None)
if mb:
validated_data["material"] = mb.material
validated_data["batch"] = mb.batch
validated_data["warehouse"] = mb.warehouse
elif wm:
validated_data["material"] = wm.material
validated_data["batch"] = wm.batch
material: Material = validated_data['material']
batch = validated_data['batch']
if mio.state != MIO.MIO_CREATE:
raise ValidationError('出入库记录非创建中不可新增')
# 生产领料要校验是否进行检验
@ -153,18 +169,23 @@ class MIOItemCreateSerializer(CustomModelSerializer):
else:
raise ParseError('缺少组合件')
if material.tracking == Material.MA_TRACKING_SINGLE:
if mio.type == MIO.MIO_TYPE_PUR_IN:
if count == 1 and len(mioitemw) == 0:
MIOItemw.objects.create(mioitem=instance, number=batch)
elif count == 1 and len(mioitemw) >= 1:
MIOItemw.objects.create(mioitem=instance, number=mioitemw[0]['number'], note=mioitemw[0]['note'])
elif count > 1 and len(mioitemw) == count:
for item in mioitemw:
MIOItemw.objects.create(mioitem=instance, number=item['number'], note=item['note'])
if len(mioitemw) == 0:
if mb:
wpr_qs = Wpr.get_qs_by_mb(mb)
if wpr_qs.count() == validated_data["count"]:
for item in wpr_qs:
MIOItemw.objects.create(mioitem=instance, number=item.number, wpr=item)
else:
raise ParseError('请提供产品明细编号')
elif wm:
wpr_qs = Wpr.get_qs_by_wm(wm)
if wpr_qs.count() == validated_data["count"]:
for item in wpr_qs:
MIOItemw.objects.create(mioitem=instance, number=item.number, wpr=item)
else:
raise ParseError('请提供产品明细编号')
else:
raise ParseError('单个明细信息不匹配')
else:
raise ParseError("暂只支持采购入库")
raise ParseError('不支持自动生成请提供产品明细')
return instance

View File

@ -47,6 +47,14 @@ class Wpr(BaseModel):
def clear(cls, number_list):
cls.objects.filter(number__in=number_list).update(mb=None, wm=None)
@classmethod
def get_qs_by_mb(cls, mb):
return cls.objects.filter(mb=mb, wm=None)
@classmethod
def get_qs_by_wm(cls, wm):
return cls.objects.filter(wm=wm, mb=None)
class WprDefect(BaseModel):
wpr = models.ForeignKey(Wpr, verbose_name="关联产物", on_delete=models.CASCADE)