From 305fda44c2ddf652bc7d8a50c26502a0aa62b900 Mon Sep 17 00:00:00 2001 From: caoqianming Date: Wed, 18 Sep 2024 09:34:55 +0800 Subject: [PATCH 1/3] =?UTF-8?q?feat:=20wmaterialserializer=20=E5=A2=9E?= =?UTF-8?q?=E5=8A=A0count=5Fcando=E8=BF=94=E5=9B=9E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/wpm/models.py | 2 +- apps/wpm/serializers.py | 7 ++++++- 2 files changed, 7 insertions(+), 2 deletions(-) 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): From 5628a1ff83702e1b489b3ac6084b1bbe4c0f4d44 Mon Sep 17 00:00:00 2001 From: caoqianming Date: Thu, 19 Sep 2024 15:08:54 +0800 Subject: [PATCH 2/3] =?UTF-8?q?feat:=20ftestwork=E5=A2=9E=E5=8A=A0?= =?UTF-8?q?=E6=A0=A1=E9=AA=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/qm/serializers.py | 2 ++ 1 file changed, 2 insertions(+) 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 From 8273a965974870a0615c4a81782d25382fc19598 Mon Sep 17 00:00:00 2001 From: caoqianming Date: Fri, 20 Sep 2024 09:16:03 +0800 Subject: [PATCH 3/3] =?UTF-8?q?fix:=20FtestWork=20=E6=A3=80=E9=AA=8C?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E8=AE=BE=E7=BD=AE=E4=B8=BA=E9=9D=9E=E8=B4=9F?= =?UTF-8?q?=E6=95=B4=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/qm/migrations/0025_auto_20240920_0914.py | 38 +++++++++++++++++++ apps/qm/models.py | 10 ++--- 2 files changed, 43 insertions(+), 5 deletions(-) create mode 100644 apps/qm/migrations/0025_auto_20240920_0914.py 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(