diff --git a/apps/mtm/migrations/0020_material_cate.py b/apps/mtm/migrations/0020_material_cate.py new file mode 100644 index 00000000..d433d6be --- /dev/null +++ b/apps/mtm/migrations/0020_material_cate.py @@ -0,0 +1,18 @@ +# Generated by Django 3.2.12 on 2023-10-30 08:45 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('mtm', '0019_route_is_count_utask'), + ] + + operations = [ + migrations.AddField( + model_name='material', + name='cate', + field=models.CharField(default='', max_length=20, verbose_name='大类'), + ), + ] diff --git a/apps/wpm/migrations/0016_auto_20231030_1645.py b/apps/wpm/migrations/0016_auto_20231030_1645.py new file mode 100644 index 00000000..c8286b5b --- /dev/null +++ b/apps/wpm/migrations/0016_auto_20231030_1645.py @@ -0,0 +1,54 @@ +# Generated by Django 3.2.12 on 2023-10-30 08:45 + +from django.conf import settings +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('em', '0005_auto_20230906_1431'), + ('mtm', '0020_material_cate'), + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ('pm', '0013_mtask_is_count_utask'), + ('wpm', '0015_auto_20231030_1133'), + ] + + operations = [ + migrations.AddField( + model_name='mlog', + name='count_real_weight', + field=models.FloatField(default=0, verbose_name='生产重量'), + ), + migrations.AddField( + model_name='mlog', + name='equipment', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='em.equipment', verbose_name='生产设备'), + ), + migrations.AddField( + model_name='mlog', + name='handle_users', + field=models.ManyToManyField(blank=True, to=settings.AUTH_USER_MODEL, verbose_name='操作人(多选)'), + ), + migrations.AddField( + model_name='mlog', + name='material_out', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='mtm.material', verbose_name='产物'), + ), + migrations.AddField( + model_name='mlog', + name='mgroup', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='mtm.mgroup', verbose_name='工段'), + ), + migrations.AddField( + model_name='mlog', + name='note', + field=models.TextField(default=0, verbose_name='备注'), + ), + migrations.AlterField( + model_name='mlog', + name='mtask', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='pm.mtask', verbose_name='关联任务'), + ), + ] diff --git a/apps/wpm/models.py b/apps/wpm/models.py index 7811f962..9989b865 100644 --- a/apps/wpm/models.py +++ b/apps/wpm/models.py @@ -4,6 +4,7 @@ from apps.mtm.models import Mgroup, Team, Shift, Material from apps.pm.models import Mtask from apps.system.models import User from django.utils.timezone import localtime +from apps.em.models import Equipment # Create your models here. @@ -82,10 +83,17 @@ class Mlog(CommonADModel): 生产日志 """ mtask = models.ForeignKey( - Mtask, verbose_name='关联生产', on_delete=models.CASCADE) + Mtask, verbose_name='关联任务', on_delete=models.CASCADE, null=True, blank=True) + mgroup = models.ForeignKey( + Mgroup, verbose_name='工段', on_delete=models.CASCADE, null=True, blank=True) + material_out = models.ForeignKey( + Material, verbose_name='产物', on_delete=models.CASCADE, null=True, blank=True) + equipment = models.ForeignKey( + Equipment, verbose_name='生产设备', on_delete=models.CASCADE, null=True, blank=True) batch = models.CharField('批次号', max_length=50) count_use = models.PositiveIntegerField('领用数', default=0) count_real = models.PositiveIntegerField('实际生产数', default=0) + count_real_weight = models.FloatField('生产重量', default=0) count_ok = models.PositiveIntegerField('合格数', default=0) count_notok = models.PositiveIntegerField('不合格数', default=0) @@ -102,5 +110,8 @@ class Mlog(CommonADModel): handle_date = models.DateField('操作日期') handle_user = models.ForeignKey( User, verbose_name='操作人', on_delete=models.CASCADE, related_name='mlog_handle_user') + handle_users = models.ManyToManyField( + User, verbose_name='操作人(多选)', blank=True) handle_leader = models.ForeignKey( User, verbose_name='班长', on_delete=models.CASCADE, null=True, blank=True, related_name='mlog_handle_leader') + note = models.TextField('备注', default=0) diff --git a/apps/wpm/serializers.py b/apps/wpm/serializers.py index b06062d0..f012bea2 100644 --- a/apps/wpm/serializers.py +++ b/apps/wpm/serializers.py @@ -93,10 +93,18 @@ class MlogSerializer(CustomModelSerializer): read_only_fields = EXCLUDE_FIELDS def create(self, validated_data): - mtask = validated_data['mtask'] + mtask = validated_data.get('mtask', None) batch = validated_data['batch'] handle_date = validated_data['handle_date'] handle_user = validated_data['handle_user'] + if mtask: + validated_data['mgroup'] = mtask.mgroup + validated_data['material_out'] = mtask.material_out + else: + mgroup = validated_data['mgroup'] + material_out = validated_data['material_out'] + if not (mgroup and material_out): + raise ValidationError('缺少工段或产物!') if not WMaterial.objects.filter(batch=batch).exists(): raise ValidationError('批次号不存在') if Mlog.objects.filter(mtask=mtask, batch=batch, handle_date=handle_date, handle_user=handle_user).exists(): @@ -108,6 +116,7 @@ class MlogSerializer(CustomModelSerializer): validated_data.pop('batch', None) validated_data.pop('handle_date', None) validated_data.pop('handle_user', None) + validated_data.pop('mgroup', None) return super().update(instance, validated_data) def validate(self, attrs):