Merge branch 'master' of https://e.coding.net/ctcdevteam/ehs/ehs_server
This commit is contained in:
commit
dd3c0d6f6b
|
@ -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='抽检合格数量'),
|
||||||
|
),
|
||||||
|
]
|
|
@ -118,11 +118,11 @@ class FtestWork(CommonBDModel):
|
||||||
material = models.ForeignKey(
|
material = models.ForeignKey(
|
||||||
Material, verbose_name='产品', on_delete=models.CASCADE)
|
Material, verbose_name='产品', on_delete=models.CASCADE)
|
||||||
batch = models.CharField('生产批次', max_length=50)
|
batch = models.CharField('生产批次', max_length=50)
|
||||||
count = models.IntegerField('检验数量')
|
count = models.PositiveIntegerField('检验数量')
|
||||||
count_sampling = models.IntegerField('抽检数量', default=0)
|
count_sampling = models.PositiveIntegerField('抽检数量', default=0)
|
||||||
count_sampling_ok = models.IntegerField('抽检合格数量', default=0)
|
count_sampling_ok = models.PositiveIntegerField('抽检合格数量', default=0)
|
||||||
count_ok = models.IntegerField('合格数量', default=0)
|
count_ok = models.PositiveIntegerField('合格数量', default=0)
|
||||||
count_notok = models.IntegerField('不合格数量', default=0)
|
count_notok = models.PositiveIntegerField('不合格数量', default=0)
|
||||||
need_update_wm = models.BooleanField('是否更新车间库存', default=True)
|
need_update_wm = models.BooleanField('是否更新车间库存', default=True)
|
||||||
count_notok_json = models.JSONField('不合格项数量统计', default=dict, null=False, blank=True)
|
count_notok_json = models.JSONField('不合格项数量统计', default=dict, null=False, blank=True)
|
||||||
test_user = models.ForeignKey(
|
test_user = models.ForeignKey(
|
||||||
|
|
|
@ -93,6 +93,8 @@ class FtestWorkCreateUpdateSerializer(CustomModelSerializer):
|
||||||
else:
|
else:
|
||||||
raise ValidationError(f'不合格项{k_2}必须为非负整数')
|
raise ValidationError(f'不合格项{k_2}必须为非负整数')
|
||||||
attrs['count_notok'] = count_notok
|
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']:
|
elif 'mb' in attrs and attrs['mb']:
|
||||||
attrs['wm'] = None
|
attrs['wm'] = None
|
||||||
attrs['material'] = attrs['mb'].material
|
attrs['material'] = attrs['mb'].material
|
||||||
|
|
|
@ -109,7 +109,7 @@ class WMaterial(CommonBDModel):
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def count_working(self):
|
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):
|
class Fmlog(CommonADModel):
|
||||||
route = models.ForeignKey(Route, verbose_name='生产路线', on_delete=models.SET_NULL, null=True, blank=True)
|
route = models.ForeignKey(Route, verbose_name='生产路线', on_delete=models.SET_NULL, null=True, blank=True)
|
||||||
|
|
|
@ -181,7 +181,7 @@ class WMaterialSerializer(CustomModelSerializer):
|
||||||
source='belong_dept.name', read_only=True)
|
source='belong_dept.name', read_only=True)
|
||||||
material_origin_name = serializers.StringRelatedField(source='material_origin', read_only=True)
|
material_origin_name = serializers.StringRelatedField(source='material_origin', read_only=True)
|
||||||
notok_sign_name = serializers.SerializerMethodField()
|
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):
|
def get_notok_sign_name(self, obj):
|
||||||
return getattr(NotOkOption, obj.notok_sign, NotOkOption.qt).label if obj.notok_sign else None
|
return getattr(NotOkOption, obj.notok_sign, NotOkOption.qt).label if obj.notok_sign else None
|
||||||
|
@ -190,6 +190,11 @@ class WMaterialSerializer(CustomModelSerializer):
|
||||||
model = WMaterial
|
model = WMaterial
|
||||||
fields = '__all__'
|
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):
|
class MlogbSerializer(CustomModelSerializer):
|
||||||
material_out_ = MaterialSimpleSerializer(
|
material_out_ = MaterialSimpleSerializer(
|
||||||
|
|
Loading…
Reference in New Issue