feat: 销售发货时可以设置对外编号
This commit is contained in:
parent
7f31ec8add
commit
5c21d6042b
|
@ -0,0 +1,18 @@
|
||||||
|
# Generated by Django 3.2.12 on 2025-07-28 08:51
|
||||||
|
|
||||||
|
from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('inm', '0033_alter_mio_type'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.AddField(
|
||||||
|
model_name='mioitemw',
|
||||||
|
name='number_out',
|
||||||
|
field=models.TextField(blank=True, null=True, verbose_name='对外编号'),
|
||||||
|
),
|
||||||
|
]
|
|
@ -212,6 +212,7 @@ class MIOItemw(BaseModel):
|
||||||
TN:单件记录
|
TN:单件记录
|
||||||
"""
|
"""
|
||||||
number = models.TextField('编号')
|
number = models.TextField('编号')
|
||||||
|
number_out = models.TextField('对外编号', null=True, blank=True)
|
||||||
wpr = models.ForeignKey("wpmw.wpr", verbose_name='关联产品', on_delete=models.SET_NULL, related_name='wpr_mioitemw'
|
wpr = models.ForeignKey("wpmw.wpr", verbose_name='关联产品', on_delete=models.SET_NULL, related_name='wpr_mioitemw'
|
||||||
, null=True, blank=True)
|
, null=True, blank=True)
|
||||||
mioitem = models.ForeignKey(MIOItem, verbose_name='关联出入库明细', on_delete=models.CASCADE, related_name='w_mioitem')
|
mioitem = models.ForeignKey(MIOItem, verbose_name='关联出入库明细', on_delete=models.CASCADE, related_name='w_mioitem')
|
||||||
|
|
|
@ -359,6 +359,7 @@ class InmService:
|
||||||
out = -1
|
out = -1
|
||||||
默认使用count字段做加减
|
默认使用count字段做加减
|
||||||
"""
|
"""
|
||||||
|
mio_type = i.mio.type
|
||||||
material: Material = i.material
|
material: Material = i.material
|
||||||
warehouse = i.warehouse
|
warehouse = i.warehouse
|
||||||
tracking = material.tracking
|
tracking = material.tracking
|
||||||
|
@ -439,8 +440,11 @@ class InmService:
|
||||||
mioitemws = MIOItemw.objects.filter(Q(ftest=None) | Q(ftest__defect_main=None), mioitem=i)
|
mioitemws = MIOItemw.objects.filter(Q(ftest=None) | Q(ftest__defect_main=None), mioitem=i)
|
||||||
if mioitemws.count() != change_count:
|
if mioitemws.count() != change_count:
|
||||||
raise ParseError("出入库与明细数量不一致,操作失败")
|
raise ParseError("出入库与明细数量不一致,操作失败")
|
||||||
|
number_out = None
|
||||||
|
if mio_type == MIO.MIO_TYPE_SALE_OUT:
|
||||||
|
number_out = mioitemw.number_out
|
||||||
for mioitemw in mioitemws:
|
for mioitemw in mioitemws:
|
||||||
Wpr.change_or_new(wpr=mioitemw.wpr, old_mb=mb)
|
Wpr.change_or_new(wpr=mioitemw.wpr, old_mb=mb, number_out=number_out)
|
||||||
else:
|
else:
|
||||||
raise ParseError("不支持的操作")
|
raise ParseError("不支持的操作")
|
||||||
|
|
||||||
|
|
|
@ -8,6 +8,7 @@ from apps.wpm.models import WmStateOption, Mlogbw, Handoverbw
|
||||||
from apps.utils.tools import update_dict
|
from apps.utils.tools import update_dict
|
||||||
from apps.inm.models import MIOItemw
|
from apps.inm.models import MIOItemw
|
||||||
from django.db.models import F, Value
|
from django.db.models import F, Value
|
||||||
|
from django.db import IntegrityError
|
||||||
|
|
||||||
# Create your models here.
|
# Create your models here.
|
||||||
class Wpr(BaseModel):
|
class Wpr(BaseModel):
|
||||||
|
@ -31,7 +32,7 @@ class Wpr(BaseModel):
|
||||||
data = models.JSONField(verbose_name="数据", default=dict, blank=True)
|
data = models.JSONField(verbose_name="数据", default=dict, blank=True)
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def change_or_new(cls, wpr=None, number=None, mb=None, wm=None, old_mb=None, old_wm=None, ftest=None, wpr_from=None, add_version=True):
|
def change_or_new(cls, wpr=None, number=None, mb=None, wm=None, old_mb=None, old_wm=None, ftest=None, wpr_from=None, add_version=True, number_out=None):
|
||||||
is_create = False
|
is_create = False
|
||||||
if wpr is None and number is None:
|
if wpr is None and number is None:
|
||||||
raise ParseError("id和number不能同时为空")
|
raise ParseError("id和number不能同时为空")
|
||||||
|
@ -127,6 +128,12 @@ class Wpr(BaseModel):
|
||||||
ins.save()
|
ins.save()
|
||||||
# if ins.mb and ins.wm:
|
# if ins.mb and ins.wm:
|
||||||
# raise ParseError("所属仓库批次和车间批次不可同时存在2")
|
# raise ParseError("所属仓库批次和车间批次不可同时存在2")
|
||||||
|
if number_out:
|
||||||
|
try:
|
||||||
|
ins.number_out = number_out
|
||||||
|
ins.save()
|
||||||
|
except IntegrityError:
|
||||||
|
raise ParseError(f"{ins.number}-出库编号-{number_out}-已存在")
|
||||||
return ins
|
return ins
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
|
|
|
@ -54,6 +54,14 @@ class WprViewSet(CustomListModelMixin, RetrieveModelMixin, ComplexQueryMixin, Cu
|
||||||
mat = Material.objects.get(id=material_start)
|
mat = Material.objects.get(id=material_start)
|
||||||
return Response({"count": count, "last_number": last_number, "material_model":mat.model, "last_number_count": last_number_count})
|
return Response({"count": count, "last_number": last_number, "material_model":mat.model, "last_number_count": last_number_count})
|
||||||
|
|
||||||
def assgin_number_out(self, request, *args, **kwargs):
|
@action(methods=['get'], detail=False, perms_map={'get': '*'})
|
||||||
"""分配对外编号"""
|
def number_out_last(self, request, *args, **kwargs):
|
||||||
pass
|
"""获取最新的出库对外编号"""
|
||||||
|
prefix = request.query_params.get("prefix")
|
||||||
|
wpr_qs_last = Wpr.objects.filter(number_out__startswith=prefix).order_by("number_out").last()
|
||||||
|
if wpr_qs_last:
|
||||||
|
number_out = wpr_qs_last.number_out
|
||||||
|
number_int = number_out.lstrip(prefix).lstrip('0')
|
||||||
|
return Response({"number_out_last": wpr_qs_last.number_out, "number_out_int_last": number_int})
|
||||||
|
else:
|
||||||
|
return Response({"number_out_last": None})
|
Loading…
Reference in New Issue