feat: 增加handoverb
This commit is contained in:
parent
d6e3657298
commit
2b9ec6d01c
|
@ -0,0 +1,40 @@
|
|||
# Generated by Django 3.2.12 on 2024-09-05 02:57
|
||||
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
import django.utils.timezone
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('wpm', '0068_auto_20240904_1549'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterField(
|
||||
model_name='handover',
|
||||
name='batch',
|
||||
field=models.CharField(blank=True, max_length=50, null=True, verbose_name='批次号'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='handover',
|
||||
name='type',
|
||||
field=models.PositiveSmallIntegerField(choices=[(10, '正常交接'), (20, '返修交接'), (30, '检验交接'), (40, '报废交接')], default=10, verbose_name='交接类型'),
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='Handoverb',
|
||||
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='删除标记')),
|
||||
('count', models.PositiveIntegerField(default=0, verbose_name='送料数')),
|
||||
('handover', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='wpm.handover', verbose_name='关联交接记录')),
|
||||
('wm', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='handoverb_wm', to='wpm.wmaterial', verbose_name='关联车间库存')),
|
||||
],
|
||||
options={
|
||||
'abstract': False,
|
||||
},
|
||||
),
|
||||
]
|
|
@ -297,7 +297,7 @@ class Handover(CommonADModel):
|
|||
Mgroup, verbose_name='送料工段', on_delete=models.CASCADE, null=True, blank=True)
|
||||
send_dept = models.ForeignKey(
|
||||
Dept, verbose_name='送料部门', on_delete=models.CASCADE, related_name='handover_send_dept')
|
||||
batch = models.CharField('批次号', max_length=50)
|
||||
batch = models.CharField('批次号', max_length=50, null=True, blank=True)
|
||||
material = models.ForeignKey(
|
||||
Material, verbose_name='物料', on_delete=models.CASCADE, related_name='h_ma')
|
||||
material_changed = models.ForeignKey(Material, verbose_name='变更后物料', on_delete=models.CASCADE, null=True, blank=True, related_name='h_ma_c')
|
||||
|
@ -319,8 +319,15 @@ class Handover(CommonADModel):
|
|||
submit_user = models.ForeignKey(
|
||||
User, verbose_name='提交人', on_delete=models.CASCADE, null=True, blank=True, related_name='handover_submit_user')
|
||||
|
||||
@property
|
||||
def handoverb(self):
|
||||
return Handoverb.objects.filter(handover=self)
|
||||
|
||||
class Handoverb(BaseModel):
|
||||
pass
|
||||
handover = models.ForeignKey(Handover, verbose_name='关联交接记录', on_delete=models.CASCADE)
|
||||
wm = models.ForeignKey(WMaterial, verbose_name='关联车间库存', on_delete=models.SET_NULL,
|
||||
null=True, blank=True, related_name='handoverb_wm')
|
||||
count = models.PositiveIntegerField('送料数', default=0)
|
||||
|
||||
class AttLog(CommonADModel):
|
||||
"""
|
||||
|
|
|
@ -4,7 +4,8 @@ from rest_framework import serializers
|
|||
from rest_framework.exceptions import ValidationError, ParseError
|
||||
from datetime import datetime
|
||||
|
||||
from .models import SfLog, StLog, SfLogExp, WMaterial, Mlog, Handover, Mlogb, AttLog, OtherLog, Fmlog
|
||||
from .models import (SfLog, StLog, SfLogExp, WMaterial, Mlog,
|
||||
Handover, Handoverb, Mlogb, AttLog, OtherLog, Fmlog)
|
||||
from apps.system.models import Dept, User
|
||||
from apps.system.serializers import UserSimpleSerializer
|
||||
from apps.pm.models import Mtask, Mtaskb
|
||||
|
@ -542,6 +543,12 @@ class MlogRelatedSerializer(serializers.Serializer):
|
|||
class DeptBatchSerializer(serializers.Serializer):
|
||||
belong_dept_name = serializers.CharField(label='车间名称')
|
||||
|
||||
class HandoverbSerializer(CustomModelSerializer):
|
||||
class Meta:
|
||||
model = Handoverb
|
||||
fields = "__all__"
|
||||
read_only_fields = EXCLUDE_FIELDS_BASE + ['handover']
|
||||
extra_kwargs = {'wm': {'required': True}}
|
||||
|
||||
class HandoverSerializer(CustomModelSerializer):
|
||||
# wm = serializers.PrimaryKeyRelatedField(
|
||||
|
@ -560,12 +567,20 @@ class HandoverSerializer(CustomModelSerializer):
|
|||
material_name = serializers.StringRelatedField(
|
||||
source='material', read_only=True)
|
||||
wm_notok_sign = serializers.CharField(source='wm.notok_sign', read_only=True)
|
||||
handoverb = HandoverbSerializer(many=True, read_only=True)
|
||||
|
||||
def validate(self, attrs):
|
||||
if 'type' not in attrs:
|
||||
attrs['type'] = Handover.H_NORMAL
|
||||
wm:WMaterial = attrs['wm']
|
||||
material = wm.material
|
||||
wm:WMaterial = attrs.get('wm', None)
|
||||
handoverb = attrs.get('handoverb', [])
|
||||
if wm:
|
||||
material = wm.material
|
||||
attrs['handoverb'] = [{"wm": wm, "count": attrs["count"] }]
|
||||
elif handoverb:
|
||||
wm: WMaterial = handoverb[0]["wm"]
|
||||
else:
|
||||
raise ParseError('必须指定车间库存')
|
||||
attrs['material'] = wm.material
|
||||
attrs['batch'] = wm.batch
|
||||
attrs['send_dept'] = wm.belong_dept
|
||||
|
@ -579,10 +594,14 @@ class HandoverSerializer(CustomModelSerializer):
|
|||
raise ValidationError('收料车间和收料工段必须有一个')
|
||||
if 'send_dept' not in attrs and 'send_mgroup' not in attrs:
|
||||
raise ValidationError('送料车间和送料工段必须有一个')
|
||||
if wm.notok_sign is not None and attrs['type'] in [Handover.H_NORMAL, Handover.H_TEST]:
|
||||
raise ValidationError('物料不合格,不能进行正常/检验交接')
|
||||
if wm.count_xtest is not None:
|
||||
raise ValidationError('物料检验中,不能进行交接')
|
||||
for ind, item in enumerate(handoverb):
|
||||
wm = item["wm"]
|
||||
if attrs["material"] != wm.material:
|
||||
raise ParseError(f'第{ind+1}物料与交接物料不一致')
|
||||
if wm.notok_sign is not None and attrs['type'] in [Handover.H_NORMAL, Handover.H_TEST]:
|
||||
raise ParseError(f'第{ind+1}物料不合格,不能进行正常/检验交接')
|
||||
if wm.count_xtest is not None:
|
||||
raise ParseError(f'第{ind+1}物料检验中,不能进行交接')
|
||||
return attrs
|
||||
|
||||
class Meta:
|
||||
|
@ -591,7 +610,7 @@ class HandoverSerializer(CustomModelSerializer):
|
|||
read_only_fields = EXCLUDE_FIELDS + ["mlog"]
|
||||
extra_kwargs = {
|
||||
"type": {"required": False},
|
||||
"wm": {"required": True},
|
||||
"wm": {"required": False},
|
||||
"send_dept": {"required": False},
|
||||
"recive_mgroup": {"required": False},
|
||||
"recive_dept": {"required": False},
|
||||
|
@ -614,6 +633,7 @@ class HandoverUpdateSerializer(CustomModelSerializer):
|
|||
fields = ['id', 'send_date', 'send_user', 'count', 'count_eweight', 'recive_user']
|
||||
|
||||
|
||||
|
||||
class GenHandoverSerializer(serializers.Serializer):
|
||||
mlogs = serializers.PrimaryKeyRelatedField(
|
||||
label='mlog的ID列表', queryset=Mlog.objects.all(), many=True)
|
||||
|
|
Loading…
Reference in New Issue