From 88bf75baafe9b303b05295c83b90907296bb1ff6 Mon Sep 17 00:00:00 2001 From: caoqianming Date: Mon, 14 Apr 2025 22:49:31 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20fmlog=E6=B7=BB=E5=8A=A0is=5Ffix?= =?UTF-8?q?=E5=AD=97=E6=AE=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../wpm/migrations/0108_auto_20250414_2244.py | 25 +++++++++++++++++++ apps/wpm/models.py | 4 ++- apps/wpm/serializers.py | 8 +++++- 3 files changed, 35 insertions(+), 2 deletions(-) create mode 100644 apps/wpm/migrations/0108_auto_20250414_2244.py diff --git a/apps/wpm/migrations/0108_auto_20250414_2244.py b/apps/wpm/migrations/0108_auto_20250414_2244.py new file mode 100644 index 00000000..9bf9e080 --- /dev/null +++ b/apps/wpm/migrations/0108_auto_20250414_2244.py @@ -0,0 +1,25 @@ +# Generated by Django 3.2.12 on 2025-04-14 14:44 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('pm', '0021_auto_20250317_1040'), + ('wpm', '0107_alter_handoverb_handover'), + ] + + operations = [ + migrations.AddField( + model_name='fmlog', + name='is_fix', + field=models.BooleanField(default=False, verbose_name='是否用于返修'), + ), + migrations.AlterField( + model_name='fmlog', + name='mtask', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='fmlog_mtask', to='pm.mtask', verbose_name='任务'), + ), + ] diff --git a/apps/wpm/models.py b/apps/wpm/models.py index 84b46ff1..9d6de7c5 100644 --- a/apps/wpm/models.py +++ b/apps/wpm/models.py @@ -145,9 +145,11 @@ class WMaterial(CommonBDModel): class Fmlog(CommonADModel): """TN: 父级生产日志 """ - mtask = models.ForeignKey(Mtask, verbose_name='任务', on_delete=models.CASCADE, related_name='fmlog_mtask') + mtask = models.ForeignKey(Mtask, verbose_name='任务', + on_delete=models.CASCADE, related_name='fmlog_mtask', null=True, blank=True) mgroup = models.ForeignKey(Mgroup, verbose_name='工段', on_delete=models.CASCADE, related_name='fmlog_mgroup') note = models.TextField('备注', default='', blank=True) + is_fix = models.BooleanField('是否用于返修', default=False) # 返工/复检 enabled = models.BooleanField("是否启用", default=True) class Mlog(CommonADModel): diff --git a/apps/wpm/serializers.py b/apps/wpm/serializers.py index 8cb642ec..59166913 100644 --- a/apps/wpm/serializers.py +++ b/apps/wpm/serializers.py @@ -543,7 +543,7 @@ class MlogSerializer(CustomModelSerializer): attrs['mgroup'] = fmlog.mgroup attrs['mtask'] = fmlog.mtask attrs['mtype'] = fmlog.mgroup.mtype - if attrs['mtask'].route: + if attrs['mtask'] and attrs['mtask'].route: attrs['route'] = attrs['mtask'].route # if attrs['mtask'].mtaskb and mtaskb is None: # raise ParseError('子任务不能为空') @@ -1174,6 +1174,7 @@ class AttLogSerializer(CustomModelSerializer): class FmlogSerializer(CustomModelSerializer): routepack_name = serializers.CharField( source='mtask.route.routepack.name', read_only=True) + mgroup_name = serializers.CharField(source='mgroup.name', read_only=True) mtask_number = serializers.CharField(source='mtask.number', read_only=True) class Meta: model = Fmlog @@ -1181,6 +1182,11 @@ class FmlogSerializer(CustomModelSerializer): read_only_fields = EXCLUDE_FIELDS def validate(self, attrs): + is_fix = attrs['is_fix'] + if is_fix: + attrs["mgroup"] = None + elif not attrs.get("mtask", None): + raise ParseError("请选择任务") mtask: Mtask = attrs['mtask'] if mtask.state != Mtask.MTASK_ASSGINED: raise ParseError('该任务非下达中不可选择')