feat: mio自动生成编号
This commit is contained in:
parent
f59cb2cbc2
commit
5bd17c4a37
|
@ -4,6 +4,8 @@ from apps.pum.models import Supplier, PuOrder
|
||||||
from apps.sam.models import Customer, Order
|
from apps.sam.models import Customer, Order
|
||||||
from apps.mtm.models import Material, Mgroup
|
from apps.mtm.models import Material, Mgroup
|
||||||
from apps.system.models import User
|
from apps.system.models import User
|
||||||
|
from datetime import datetime
|
||||||
|
from django.db.models import Max
|
||||||
# Create your models here.
|
# Create your models here.
|
||||||
|
|
||||||
|
|
||||||
|
@ -49,6 +51,15 @@ class MaterialBatchA(BaseModel):
|
||||||
MaterialBatch, verbose_name='关联物料批次', on_delete=models.CASCADE, related_name='a_mb')
|
MaterialBatch, verbose_name='关联物料批次', on_delete=models.CASCADE, related_name='a_mb')
|
||||||
|
|
||||||
|
|
||||||
|
MIO_TYPE_PREFIX = {
|
||||||
|
'do_out': 'SCLL', # 生产领料 (Shēngchǎn Lǐngliào)
|
||||||
|
'sale_out': 'XSFH', # 销售发货 (Xiāoshòu Fāhuò)
|
||||||
|
'pur_in': 'CGRK', # 采购入库 (Cǎigòu Rùkù)
|
||||||
|
'do_in': 'SCRK', # 生产入库 (Shēngchǎn Rùkù)
|
||||||
|
'other_in': 'QTRK', # 其他入库 (Qítā Rùkù)
|
||||||
|
'other_out': 'QTCK' # 其他出库 (Qítā Chūkù)
|
||||||
|
}
|
||||||
|
|
||||||
class MIO(CommonBDModel):
|
class MIO(CommonBDModel):
|
||||||
"""
|
"""
|
||||||
出入库记录
|
出入库记录
|
||||||
|
@ -101,8 +112,17 @@ class MIO(CommonBDModel):
|
||||||
materials = models.ManyToManyField(
|
materials = models.ManyToManyField(
|
||||||
Material, verbose_name='物料明细', through='inm.mioitem', blank=True)
|
Material, verbose_name='物料明细', through='inm.mioitem', blank=True)
|
||||||
|
|
||||||
def get_a_number(self, type):
|
@classmethod
|
||||||
pass
|
def get_a_number(cls, mio_type:str):
|
||||||
|
today_str = datetime.now().strftime('%Y%m%d')
|
||||||
|
prefix = MIO_TYPE_PREFIX[mio_type]
|
||||||
|
last_record = MIO.objects.filter(number__startswith=f"{prefix}-{today_str}") \
|
||||||
|
.aggregate(Max('number'))['number__max']
|
||||||
|
if last_record:
|
||||||
|
last_number = int(last_record.split('-')[-1]) + 1
|
||||||
|
else:
|
||||||
|
last_number = 1
|
||||||
|
return f"{prefix}-{today_str}-{last_number:04d}"
|
||||||
|
|
||||||
class MIOItem(BaseModel):
|
class MIOItem(BaseModel):
|
||||||
"""
|
"""
|
||||||
|
|
|
@ -85,7 +85,7 @@ class MIOListSerializer(CustomModelSerializer):
|
||||||
model = MIO
|
model = MIO
|
||||||
fields = '__all__'
|
fields = '__all__'
|
||||||
read_only_fields = EXCLUDE_FIELDS + \
|
read_only_fields = EXCLUDE_FIELDS + \
|
||||||
['state', 'submit_time', 'submit_user']
|
['state', 'submit_time', 'submit_user', 'number']
|
||||||
|
|
||||||
|
|
||||||
class MIOItemACreateSerializer(CustomModelSerializer):
|
class MIOItemACreateSerializer(CustomModelSerializer):
|
||||||
|
@ -230,7 +230,8 @@ class MIODoSerializer(CustomModelSerializer):
|
||||||
model = MIO
|
model = MIO
|
||||||
fields = ['id', 'number', 'note', 'do_user',
|
fields = ['id', 'number', 'note', 'do_user',
|
||||||
'belong_dept', 'type', 'inout_date', 'mgroup', 'mio_user']
|
'belong_dept', 'type', 'inout_date', 'mgroup', 'mio_user']
|
||||||
extra_kwargs = {'inout_date': {'required': True}, 'do_user': {'required': True}}
|
extra_kwargs = {'inout_date': {'required': True},
|
||||||
|
'do_user': {'required': True}, 'number': {"readonly": True}}
|
||||||
|
|
||||||
def validate(self, attrs):
|
def validate(self, attrs):
|
||||||
if 'mgroup' in attrs and attrs['mgroup']:
|
if 'mgroup' in attrs and attrs['mgroup']:
|
||||||
|
@ -238,6 +239,7 @@ class MIODoSerializer(CustomModelSerializer):
|
||||||
return attrs
|
return attrs
|
||||||
|
|
||||||
def create(self, validated_data):
|
def create(self, validated_data):
|
||||||
|
validated_data["number"] = MIO.get_a_number(validated_data["type"])
|
||||||
if validated_data['type'] not in [MIO.MIO_TYPE_DO_OUT, MIO.MIO_TYPE_DO_IN]:
|
if validated_data['type'] not in [MIO.MIO_TYPE_DO_OUT, MIO.MIO_TYPE_DO_IN]:
|
||||||
raise ValidationError('出入库类型错误')
|
raise ValidationError('出入库类型错误')
|
||||||
return super().create(validated_data)
|
return super().create(validated_data)
|
||||||
|
@ -283,10 +285,11 @@ class MIOPurSerializer(CustomModelSerializer):
|
||||||
class Meta:
|
class Meta:
|
||||||
model = MIO
|
model = MIO
|
||||||
fields = ['id', 'number', 'note', 'pu_order', 'inout_date', 'supplier', 'mio_user']
|
fields = ['id', 'number', 'note', 'pu_order', 'inout_date', 'supplier', 'mio_user']
|
||||||
extra_kwargs = {'inout_date': {'required': True}}
|
extra_kwargs = {'inout_date': {'required': True}, 'number': {"readonly": True}}
|
||||||
|
|
||||||
def create(self, validated_data):
|
def create(self, validated_data):
|
||||||
validated_data['type'] = MIO.MIO_TYPE_PUR_IN
|
validated_data['type'] = MIO.MIO_TYPE_PUR_IN
|
||||||
|
validated_data['number'] = MIO.get_a_number(validated_data["type"])
|
||||||
pu_order: PuOrder = validated_data.get('pu_order', None)
|
pu_order: PuOrder = validated_data.get('pu_order', None)
|
||||||
if pu_order:
|
if pu_order:
|
||||||
if pu_order.state in [PuOrder.PUORDER_CREATE, PuOrder.PUORDER_DONE]:
|
if pu_order.state in [PuOrder.PUORDER_CREATE, PuOrder.PUORDER_DONE]:
|
||||||
|
@ -309,9 +312,10 @@ class MIOOtherSerializer(CustomModelSerializer):
|
||||||
model = MIO
|
model = MIO
|
||||||
fields = ['id', 'number', 'note', 'supplier',
|
fields = ['id', 'number', 'note', 'supplier',
|
||||||
'customer', 'type', 'inout_date', 'mio_user']
|
'customer', 'type', 'inout_date', 'mio_user']
|
||||||
extra_kwargs = {'inout_date': {'required': True}}
|
extra_kwargs = {'inout_date': {'required': True}, 'number': {"readonly": True}}
|
||||||
|
|
||||||
def create(self, validated_data):
|
def create(self, validated_data):
|
||||||
|
validated_data['number'] = MIO.get_a_number(validated_data["type"])
|
||||||
if validated_data['type'] not in [MIO.MIO_TYPE_OTHER_OUT, MIO.MIO_TYPE_OTHER_IN]:
|
if validated_data['type'] not in [MIO.MIO_TYPE_OTHER_OUT, MIO.MIO_TYPE_OTHER_IN]:
|
||||||
raise ValidationError('出入库类型错误')
|
raise ValidationError('出入库类型错误')
|
||||||
return super().create(validated_data)
|
return super().create(validated_data)
|
||||||
|
|
|
@ -713,18 +713,19 @@ class MlogbwViewSet(CustomModelViewSet):
|
||||||
wm_in = mlogbin.wm_in
|
wm_in = mlogbin.wm_in
|
||||||
mlog = mlogbin.mlog
|
mlog = mlogbin.mlog
|
||||||
div_number = route.div_number
|
div_number = route.div_number
|
||||||
m_dict = {
|
if ins.mlogb_to:
|
||||||
|
mlogbout = ins.mlogb_to
|
||||||
|
else:
|
||||||
|
m_dict = {
|
||||||
"mtask": mlogbin.mtask,
|
"mtask": mlogbin.mtask,
|
||||||
"mlog": mlog,
|
"mlog": mlog,
|
||||||
|
"batch": ins.number,
|
||||||
"material_out": material_out,
|
"material_out": material_out,
|
||||||
"batch_ofrom": wm_in.batch_ofrom,
|
"batch_ofrom": wm_in.batch_ofrom,
|
||||||
"material_ofrom": wm_in.material_ofrom,
|
"material_ofrom": wm_in.material_ofrom,
|
||||||
"count_real": div_number,
|
"count_real": div_number,
|
||||||
"count_ok": div_number, "qct": mlog.qct
|
"count_ok": div_number, "qct": mlog.qct
|
||||||
}
|
}
|
||||||
if ins.mlogb_to:
|
|
||||||
mlogbout = ins.mlogb_to
|
|
||||||
else:
|
|
||||||
mlogbout = Mlogb.objects.create(**m_dict)
|
mlogbout = Mlogb.objects.create(**m_dict)
|
||||||
ins.mlogb_to = mlogbout
|
ins.mlogb_to = mlogbout
|
||||||
ins.save(update_fields=["mlogb_to"])
|
ins.save(update_fields=["mlogb_to"])
|
||||||
|
|
Loading…
Reference in New Issue