feat: 添加发货单
This commit is contained in:
parent
de953085cd
commit
1fccdd042c
|
@ -0,0 +1,34 @@
|
|||
# Generated by Django 3.2.12 on 2025-07-31 06:04
|
||||
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
import django.utils.timezone
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('inm', '0034_mioitemw_number_out'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.CreateModel(
|
||||
name='Pack',
|
||||
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='删除标记')),
|
||||
('index', models.PositiveSmallIntegerField(default=1, verbose_name='序号')),
|
||||
('mio', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='pack_mio', to='inm.mio', verbose_name='关联出入库记录')),
|
||||
],
|
||||
options={
|
||||
'abstract': False,
|
||||
},
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='mioitem',
|
||||
name='pack',
|
||||
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='mioitem_pack', to='inm.pack', verbose_name='关联装箱单'),
|
||||
),
|
||||
]
|
|
@ -133,6 +133,13 @@ class MIO(CommonBDModel):
|
|||
last_number = 1
|
||||
return f"{prefix}-{today_str}-{last_number:04d}"
|
||||
|
||||
class Pack(BaseModel):
|
||||
"""
|
||||
TN:装箱单
|
||||
"""
|
||||
index = models.PositiveSmallIntegerField('序号', default=1)
|
||||
mio = models.ForeignKey(MIO, verbose_name='关联出入库记录', on_delete=models.CASCADE, related_name='pack_mio')
|
||||
|
||||
class MIOItem(BaseModel):
|
||||
"""
|
||||
TN:出入库明细
|
||||
|
@ -178,6 +185,7 @@ class MIOItem(BaseModel):
|
|||
|
||||
is_testok = models.BooleanField('检验是否合格', null=True, blank=True)
|
||||
note = models.TextField('备注', null=True, blank=True)
|
||||
pack = models.ForeignKey(Pack, verbose_name='关联装箱单', on_delete=models.SET_NULL, related_name='mioitem_pack', null=True, blank=True)
|
||||
|
||||
@classmethod
|
||||
def count_fields(cls):
|
||||
|
@ -219,4 +227,4 @@ class MIOItemw(BaseModel):
|
|||
ftest = models.ForeignKey("qm.ftest", verbose_name='关联检验记录', on_delete=models.PROTECT,
|
||||
related_name='mioitemw_ftest', null=True, blank=True)
|
||||
note = models.TextField('备注', null=True, blank=True)
|
||||
|
||||
|
||||
|
|
|
@ -8,7 +8,7 @@ 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 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, Pack
|
||||
from django.db import transaction
|
||||
from server.settings import get_sysconfig
|
||||
from apps.wpmw.models import Wpr
|
||||
|
@ -118,6 +118,7 @@ class MIOItemCreateSerializer(CustomModelSerializer):
|
|||
|
||||
def create(self, validated_data):
|
||||
mio:MIO = validated_data['mio']
|
||||
mio_type = mio.type
|
||||
mb = validated_data.get('mb', None)
|
||||
wm = validated_data.get('wm', None)
|
||||
assemb = validated_data.pop('assemb', [])
|
||||
|
@ -194,6 +195,8 @@ class MIOItemCreateSerializer(CustomModelSerializer):
|
|||
for item in mioitemw:
|
||||
if item.get("wpr", None) is None and mio_type != "pur_in" and mio_type != "other_in":
|
||||
raise ParseError(f'{item["number"]}_请提供产品明细ID')
|
||||
elif item.get("number_out", None) is not None and mio_type != MIO.MIO_TYPE_SALE_OUT:
|
||||
raise ParseError(f'{item["number"]}_非销售出库不可赋予产品对外编号')
|
||||
else:
|
||||
MIOItemw.objects.create(mioitem=instance, **item)
|
||||
return instance
|
||||
|
@ -407,3 +410,10 @@ class MIOItemPurInTestSerializer(CustomModelSerializer):
|
|||
attrs['weight_kgs'] = [float(i) for i in weight_kgs]
|
||||
attrs['count_sampling'] = len(attrs['weight_kgs'])
|
||||
return super().validate(attrs)
|
||||
|
||||
|
||||
class PackSerializer(CustomModelSerializer):
|
||||
class Meta:
|
||||
model = Pack
|
||||
fields = "__all__"
|
||||
read_only_fields = EXCLUDE_FIELDS_BASE
|
|
@ -441,10 +441,7 @@ class InmService:
|
|||
if mioitemws.count() != change_count:
|
||||
raise ParseError("出入库与明细数量不一致,操作失败")
|
||||
for mioitemw in mioitemws:
|
||||
number_out = None
|
||||
if mio_type == MIO.MIO_TYPE_SALE_OUT:
|
||||
number_out = mioitemw.number_out
|
||||
Wpr.change_or_new(wpr=mioitemw.wpr, old_mb=mb, number_out=number_out)
|
||||
Wpr.change_or_new(wpr=mioitemw.wpr, old_mb=mb, number_out=mioitemw.number_out)
|
||||
else:
|
||||
raise ParseError("不支持的操作")
|
||||
|
||||
|
|
Loading…
Reference in New Issue