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='关联出入库',
|
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(
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -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)
|
||||||
|
|
Loading…
Reference in New Issue