feat: 添加返修交接支持

This commit is contained in:
caoqianming 2024-07-19 10:04:02 +08:00
parent cb5ede39f0
commit 92fc1e9e0a
5 changed files with 54 additions and 9 deletions

View File

@ -0,0 +1,30 @@
# Generated by Django 3.2.12 on 2024-07-19 02:02
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('mtm', '0035_process_store_notok'),
('wpm', '0056_auto_20240718_1118'),
]
operations = [
migrations.AddField(
model_name='handover',
name='material_changed',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='h_ma_c', to='mtm.material', verbose_name='变更后物料'),
),
migrations.AddField(
model_name='handover',
name='type',
field=models.PositiveSmallIntegerField(choices=[(10, '正常交接'), (20, '返修交接')], default=10, verbose_name='交接类型'),
),
migrations.AlterField(
model_name='handover',
name='material',
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='h_ma', to='mtm.material', verbose_name='物料'),
),
]

View File

@ -239,6 +239,9 @@ class Handover(CommonADModel):
"""
交接记录
"""
H_NORMAL = 10
H_REPAIR = 20
type = models.PositiveSmallIntegerField('交接类型', choices=[(H_NORMAL, '正常交接'), (H_REPAIR, '返修交接')], default=H_NORMAL)
send_date = models.DateField('送料日期')
send_user = models.ForeignKey(
User, verbose_name='交送人', on_delete=models.CASCADE, related_name='handover_send_user')
@ -248,7 +251,8 @@ class Handover(CommonADModel):
Dept, verbose_name='送料部门', on_delete=models.CASCADE, related_name='handover_send_dept')
batch = models.CharField('批次号', max_length=50)
material = models.ForeignKey(
Material, verbose_name='物料', on_delete=models.CASCADE)
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')
count = models.PositiveIntegerField('送料数', default=0)
count_eweight = models.FloatField('单数重量', default=0)
recive_dept = models.ForeignKey(

View File

@ -433,12 +433,15 @@ class HandoverSerializer(CustomModelSerializer):
source='material', read_only=True)
def validate(self, attrs):
material = attrs['wm'].material
attrs['material'] = attrs['wm'].material
attrs['batch'] = attrs['wm'].batch
attrs['send_dept'] = attrs['wm'].belong_dept
if 'type' not in attrs:
attrs['type'] == Handover.H_NORMAL
wm:WMaterial = attrs['wm']
material = wm.material
attrs['material'] = wm.material
attrs['batch'] = wm.batch
attrs['send_dept'] = wm.belong_dept
if attrs['wm'].mgroup:
attrs['send_mgroup'] = attrs['wm'].mgroup
attrs['send_mgroup'] = wm.mgroup
if material.process and material.process.into_wm_mgroup and 'recive_mgroup' not in attrs:
raise ValidationError('必须指定交接工段')
if 'recive_mgroup' in attrs and attrs['recive_mgroup']:
@ -447,6 +450,8 @@ 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'] == Handover.H_NORMAL:
raise ValidationError('物料不合格,不能进行正常交接')
return attrs
class Meta:
@ -462,6 +467,11 @@ class HandoverSerializer(CustomModelSerializer):
"batch": {"required": False},
}
class HandoverUpdateSerializer(CustomModelSerializer):
class Meta:
model = Handover
fields = ['id', 'send_date', 'send_user', 'count', 'count_eweight', 'recive_user']
class GenHandoverSerializer(serializers.Serializer):
mlogs = serializers.PrimaryKeyRelatedField(

View File

@ -248,7 +248,7 @@ def mlog_submit(mlog: Mlog, user: User, now: Union[datetime.datetime, None]):
else:
lookup['belong_dept'] = belong_dept
if mo_count > 0:
wm, _ = WMaterial.objects.get_or_create(**lookup, defaults=lookup)
wm, _ = WMaterial.objects.get_or_create(**lookup, defaults=lookup.update({"belong_dept": belong_dept}))
wm.count = wm.count + mo_count
wm.count_eweight = mo_count_eweight
wm.update_by = user
@ -297,7 +297,7 @@ def mlog_revert(mlog: Mlog, user: User, now: Union[datetime.datetime, None]):
else:
lookup['belong_dept'] = belong_dept
wm, _ = WMaterial.objects.get_or_create(**lookup, defaults=lookup)
wm, _ = WMaterial.objects.get_or_create(**lookup, defaults=lookup.update({"belong_dept": belong_dept}))
wm.count = wm.count + mi_count
wm.update_by = user
wm.save()

View File

@ -18,7 +18,7 @@ from apps.utils.mixins import BulkCreateModelMixin
from .filters import StLogFilter, SfLogFilter, WMaterialFilter, MlogFilter, HandoverFilter, MlogbFilter
from .models import SfLog, SfLogExp, StLog, WMaterial, Mlog, Handover, Mlogb, AttLog, OtherLog
from .serializers import (SflogExpSerializer, SfLogSerializer, StLogSerializer, WMaterialSerializer, MlogRevertSerializer,
MlogSerializer, MlogRelatedSerializer, DeptBatchSerializer, HandoverSerializer,
MlogSerializer, MlogRelatedSerializer, DeptBatchSerializer, HandoverSerializer, HandoverUpdateSerializer,
GenHandoverSerializer, GenHandoverWmSerializer, MlogAnaSerializer,
AttLogSerializer, OtherLogSerializer, MlogInitSerializer, MlogChangeSerializer,
MlogbDetailSerializer, MlogbInSerializer, MlogbInUpdateSerializer, MlogbOutUpdateSerializer)
@ -313,6 +313,7 @@ class HandoverViewSet(CustomModelViewSet):
"""
queryset = Handover.objects.all()
serializer_class = HandoverSerializer
update_serializer_class = HandoverUpdateSerializer
select_related_fields = ['send_user',
'send_dept', 'recive_user', 'recive_dept']
filterset_class = HandoverFilter