feat: mioitem增加wm和mb字段
This commit is contained in:
parent
437501b668
commit
38978c9dea
|
@ -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='关联车间库存'),
|
||||
),
|
||||
]
|
|
@ -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(
|
||||
|
|
|
@ -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
|
||||
|
||||
|
||||
|
|
|
@ -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)
|
||||
|
|
Loading…
Reference in New Issue