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 478e4673..f192aa96 100644 --- a/apps/wpm/models.py +++ b/apps/wpm/models.py @@ -153,9 +153,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 8f2c6bbb..df18ea66 100644 --- a/apps/wpm/serializers.py +++ b/apps/wpm/serializers.py @@ -541,7 +541,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('子任务不能为空') @@ -1153,6 +1153,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 @@ -1160,6 +1161,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('该任务非下达中不可选择')