diff --git a/apps/qm/migrations/0025_auto_20240920_0914.py b/apps/qm/migrations/0025_auto_20240920_0914.py new file mode 100644 index 00000000..58e3bc85 --- /dev/null +++ b/apps/qm/migrations/0025_auto_20240920_0914.py @@ -0,0 +1,38 @@ +# Generated by Django 3.2.12 on 2024-09-20 01:14 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('qm', '0024_ftestwork_shift'), + ] + + operations = [ + migrations.AlterField( + model_name='ftestwork', + name='count', + field=models.PositiveIntegerField(verbose_name='检验数量'), + ), + migrations.AlterField( + model_name='ftestwork', + name='count_notok', + field=models.PositiveIntegerField(default=0, verbose_name='不合格数量'), + ), + migrations.AlterField( + model_name='ftestwork', + name='count_ok', + field=models.PositiveIntegerField(default=0, verbose_name='合格数量'), + ), + migrations.AlterField( + model_name='ftestwork', + name='count_sampling', + field=models.PositiveIntegerField(default=0, verbose_name='抽检数量'), + ), + migrations.AlterField( + model_name='ftestwork', + name='count_sampling_ok', + field=models.PositiveIntegerField(default=0, verbose_name='抽检合格数量'), + ), + ] diff --git a/apps/qm/models.py b/apps/qm/models.py index d69b2854..16baabac 100644 --- a/apps/qm/models.py +++ b/apps/qm/models.py @@ -118,11 +118,11 @@ class FtestWork(CommonBDModel): material = models.ForeignKey( Material, verbose_name='产品', on_delete=models.CASCADE) batch = models.CharField('生产批次', max_length=50) - count = models.IntegerField('检验数量') - count_sampling = models.IntegerField('抽检数量', default=0) - count_sampling_ok = models.IntegerField('抽检合格数量', default=0) - count_ok = models.IntegerField('合格数量', default=0) - count_notok = models.IntegerField('不合格数量', default=0) + count = models.PositiveIntegerField('检验数量') + count_sampling = models.PositiveIntegerField('抽检数量', default=0) + count_sampling_ok = models.PositiveIntegerField('抽检合格数量', default=0) + count_ok = models.PositiveIntegerField('合格数量', default=0) + count_notok = models.PositiveIntegerField('不合格数量', default=0) need_update_wm = models.BooleanField('是否更新车间库存', default=True) count_notok_json = models.JSONField('不合格项数量统计', default=dict, null=False, blank=True) test_user = models.ForeignKey( diff --git a/apps/qm/serializers.py b/apps/qm/serializers.py index 29c56cf0..060acccc 100644 --- a/apps/qm/serializers.py +++ b/apps/qm/serializers.py @@ -93,6 +93,8 @@ class FtestWorkCreateUpdateSerializer(CustomModelSerializer): else: raise ValidationError(f'不合格项{k_2}必须为非负整数') attrs['count_notok'] = count_notok + if type2 == 20 and attrs['count'] != attrs['count_ok'] + attrs['count_notok']: + raise ValidationError('全检时总数必须等于合格数+不合格数') elif 'mb' in attrs and attrs['mb']: attrs['wm'] = None attrs['material'] = attrs['mb'].material diff --git a/apps/wpm/models.py b/apps/wpm/models.py index 34b91399..4a02cddf 100644 --- a/apps/wpm/models.py +++ b/apps/wpm/models.py @@ -109,7 +109,7 @@ class WMaterial(CommonBDModel): @property def count_working(self): - return int(Mlogb.objects.filter(wm_in=self, mlog__work_end_time__isnull=True).aggregate(count=Sum('count_use'))['count'] or 0) + return Mlogb.objects.filter(wm_in=self, mlog__work_end_time__isnull=True).aggregate(count=Sum('count_use'))['count'] or 0 class Fmlog(CommonADModel): route = models.ForeignKey(Route, verbose_name='生产路线', on_delete=models.SET_NULL, null=True, blank=True) diff --git a/apps/wpm/serializers.py b/apps/wpm/serializers.py index f84ee9fa..dca9ef6b 100644 --- a/apps/wpm/serializers.py +++ b/apps/wpm/serializers.py @@ -181,7 +181,7 @@ class WMaterialSerializer(CustomModelSerializer): source='belong_dept.name', read_only=True) material_origin_name = serializers.StringRelatedField(source='material_origin', read_only=True) notok_sign_name = serializers.SerializerMethodField() - count_working = serializers.CharField(read_only=True, label='在制数量') + count_working = serializers.IntegerField(read_only=True, label='在制数量') def get_notok_sign_name(self, obj): return getattr(NotOkOption, obj.notok_sign, NotOkOption.qt).label if obj.notok_sign else None @@ -189,6 +189,11 @@ class WMaterialSerializer(CustomModelSerializer): class Meta: model = WMaterial fields = '__all__' + + def to_representation(self, instance): + ret = super().to_representation(instance) + ret['count_cando'] = ret['count'] - ret['count_working'] + return ret class MlogbSerializer(CustomModelSerializer):