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

View File

@ -47,6 +47,14 @@ class Wpr(BaseModel):
def clear(cls, number_list): def clear(cls, number_list):
cls.objects.filter(number__in=number_list).update(mb=None, wm=None) 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): class WprDefect(BaseModel):
wpr = models.ForeignKey(Wpr, verbose_name="关联产物", on_delete=models.CASCADE) wpr = models.ForeignKey(Wpr, verbose_name="关联产物", on_delete=models.CASCADE)