feat: mlogbw增加质检统计
This commit is contained in:
parent
2331bec13b
commit
5f88433a25
|
@ -346,6 +346,11 @@ class Mlogb(BaseModel):
|
|||
count_notok_json = models.JSONField('不合格情况', default=list, blank=True)
|
||||
defects = models.ManyToManyField("qm.defect", verbose_name='不合格缺陷',
|
||||
through="wpm.mlogbdefect", blank=True)
|
||||
def get_tracking(self):
|
||||
if self.material_in:
|
||||
return "in", self.material_in.tracking
|
||||
elif self.material_out:
|
||||
return "out", self.material_out.tracking
|
||||
|
||||
def cal_count(self):
|
||||
self.count_notok = MlogbDefect.objects.filter(
|
||||
|
|
|
@ -580,12 +580,12 @@ class MlogbwCreateUpdateSerializer(CustomModelSerializer):
|
|||
|
||||
def validate(self, attrs):
|
||||
mlogb:Mlogb = attrs["mlogb"]
|
||||
material_in:Material = mlogb.material_in
|
||||
material_out:Material = mlogb.material_out
|
||||
if material_in and material_in.tracking != Material.MA_TRACKING_SINGLE:
|
||||
raise ParseError("非追踪单件无需填写")
|
||||
if material_out and material_out.tracking != Material.MA_TRACKING_SINGLE:
|
||||
raise ParseError("非追踪单件无需填写")
|
||||
wpr:Wpr = attrs.get("wpr", None)
|
||||
in_or_out, tracking = mlogb.get_tracking()
|
||||
if tracking != Material.MA_TRACKING_SINGLE:
|
||||
raise ValidationError('非单件追踪不可使用')
|
||||
if in_or_out == 'in' and not wpr:
|
||||
raise ValidationError('请选择相应产品')
|
||||
return attrs
|
||||
|
||||
def update(self, instance, validated_data):
|
||||
|
@ -887,3 +887,10 @@ class MlogbDefectSerializer(CustomModelSerializer):
|
|||
model = MlogbDefect
|
||||
fields = "__all__"
|
||||
read_only_fields = EXCLUDE_FIELDS_BASE
|
||||
|
||||
def create(self, validated_data):
|
||||
defect = validated_data["defect"]
|
||||
mlogb = validated_data["mlogb"]
|
||||
if MlogbDefect.objects.filter(mlogb=mlogb, defect=defect).exists():
|
||||
raise ParseError('该缺陷已填写')
|
||||
return super().create(validated_data)
|
|
@ -586,18 +586,18 @@ class MlogbwViewSet(CustomModelViewSet):
|
|||
|
||||
def filter_queryset(self, queryset):
|
||||
if not self.detail and not self.request.query_params.get('mlogb', None):
|
||||
raise ParseError('请指定所属日志明细')
|
||||
raise ParseError('请指定所属消耗/产出明细')
|
||||
return super().filter_queryset(queryset)
|
||||
|
||||
def cal_mlogb_count(self, mlogb):
|
||||
count = Mlogbw.objects.filter(mlogb=mlogb).count()
|
||||
# 此处先不管检验问题
|
||||
# todo
|
||||
if mlogb.material_in:
|
||||
mlogb.count_use = count
|
||||
elif mlogb.material_out:
|
||||
mlogb.count_real = count
|
||||
mlogb.count_ok = count
|
||||
mlogb.count_notok = 0
|
||||
mlogb.save()
|
||||
|
||||
@transaction.atomic
|
||||
|
@ -613,10 +613,13 @@ class MlogbwViewSet(CustomModelViewSet):
|
|||
mlogb_to = mlogb.mlogb_to
|
||||
material_out:Material = mlogb.mlog.material_out
|
||||
if mlogb_to and material_out.tracking == Material.MA_TRACKING_SINGLE:
|
||||
for item in Mlogbw.objects.filter(mlogb=mlogb).order_by("number"):
|
||||
Mlogbw.objects.get_or_create(mlogb=mlogb_to, wpr=item.wpr, defaults={"number": item.number})
|
||||
Mlogbw.objects.get_or_create(mlogb=mlogb_to, wpr=ins.wpr, defaults={"number": ins.number})
|
||||
self.cal_mlogb_count(mlogb_to)
|
||||
|
||||
@transaction.atomic
|
||||
def perform_update(self, serializer):
|
||||
mlogbw = serializer.save()
|
||||
|
||||
@transaction.atomic
|
||||
def perform_destroy(self, instance:Mlogbw):
|
||||
mlogb = instance.mlogb
|
||||
|
@ -626,16 +629,13 @@ class MlogbwViewSet(CustomModelViewSet):
|
|||
if instance.ftest:
|
||||
instance.ftest.delete()
|
||||
self.cal_mlogb_count(mlogb)
|
||||
# 如果是输入且输出追踪到个,需同步创建
|
||||
# 如果是输入且输出追踪到个,需同步删除
|
||||
material_in: Material = mlogb.material_in
|
||||
if material_in is not None:
|
||||
mlogb_to = mlogb.mlogb_to
|
||||
material_out: Material = mlogb.mlog.material_out
|
||||
if mlogb_to and material_out.tracking == Material.MA_TRACKING_SINGLE:
|
||||
number_list = Mlogbw.objects.filter(mlogb=mlogb).values_list("number", flat=True)
|
||||
wprId_list = Mlogbw.objects.filter(mlogb=mlogb).values_list("wpr__id", flat=True)
|
||||
Mlogbw.objects.filter(mlogb=mlogb_to, number__in=number_list).delete()
|
||||
Mlogbw.objects.filter(mlogb=mlogb_to, wpr__id__in=wprId_list).delete()
|
||||
Mlogbw.objects.filter(mlogb=mlogb_to, wpr=instance.wpr).delete()
|
||||
self.cal_mlogb_count(mlogb_to)
|
||||
|
||||
|
||||
|
|
Loading…
Reference in New Issue