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