diff --git a/apps/wpm/migrations/0057_auto_20240719_1002.py b/apps/wpm/migrations/0057_auto_20240719_1002.py new file mode 100644 index 00000000..74c92a14 --- /dev/null +++ b/apps/wpm/migrations/0057_auto_20240719_1002.py @@ -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='物料'), + ), + ] diff --git a/apps/wpm/models.py b/apps/wpm/models.py index cc451125..4e5f62f1 100644 --- a/apps/wpm/models.py +++ b/apps/wpm/models.py @@ -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( diff --git a/apps/wpm/serializers.py b/apps/wpm/serializers.py index 19b5bff3..30c51a8c 100644 --- a/apps/wpm/serializers.py +++ b/apps/wpm/serializers.py @@ -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( diff --git a/apps/wpm/services.py b/apps/wpm/services.py index 5b3aa400..a818adb3 100644 --- a/apps/wpm/services.py +++ b/apps/wpm/services.py @@ -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() diff --git a/apps/wpm/views.py b/apps/wpm/views.py index c58d4e91..7a3f1d25 100644 --- a/apps/wpm/views.py +++ b/apps/wpm/views.py @@ -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