This commit is contained in:
caoqianming 2021-11-08 11:02:54 +08:00
parent 5357a2d82a
commit 0158998ef9
5 changed files with 58 additions and 17 deletions

View File

@ -0,0 +1,23 @@
# Generated by Django 3.2.6 on 2021-11-08 03:02
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('qm', '0004_auto_20211108_0951'),
]
operations = [
migrations.RemoveField(
model_name='testrecord',
name='record_data',
),
migrations.AlterField(
model_name='testrecorditem',
name='test_record',
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='item_test_record', to='qm.testrecord', verbose_name='关联的检测记录'),
),
]

View File

@ -47,9 +47,7 @@ class TestRecord(CommonAModel):
""" """
检验记录 检验记录
""" """
form = models.ForeignKey('mtm.recordform', verbose_name='所用表格', on_delete=models.CASCADE) form = models.ForeignKey('mtm.recordform', verbose_name='所用表格', on_delete=models.CASCADE)
record_data = models.JSONField('记录数据', default=dict, blank=True)
is_testok = models.BooleanField('是否合格', default=True) is_testok = models.BooleanField('是否合格', default=True)
fifo_item = models.ForeignKey('inm.fifoitem', verbose_name='关联的出入库批次', on_delete=models.CASCADE, null=True, blank=True) fifo_item = models.ForeignKey('inm.fifoitem', verbose_name='关联的出入库批次', on_delete=models.CASCADE, null=True, blank=True)
@ -65,4 +63,4 @@ class TestRecordItem(BaseModel):
field_value = models.JSONField('录入值', default=dict, blank=True) field_value = models.JSONField('录入值', default=dict, blank=True)
need_judge = models.BooleanField('是否需要判定', default=False) need_judge = models.BooleanField('是否需要判定', default=False)
is_testok = models.BooleanField('是否合格', default=True) is_testok = models.BooleanField('是否合格', default=True)
test_record = models.ForeignKey(TestRecord, verbose_name='关联的检测记录', on_delete=models.CASCADE) test_record = models.ForeignKey(TestRecord, verbose_name='关联的检测记录', on_delete=models.CASCADE, related_name='item_test_record')

View File

@ -35,13 +35,18 @@ class AnalysisItemSerializer(serializers.ModelSerializer):
pass pass
class TestRecordItemSerializer(serializers.ModelSerializer): class TestRecordItemCreateSerializer(serializers.ModelSerializer):
class Meta: class Meta:
model = TestRecordItem model = TestRecordItem
fields = ['form_field', 'field_value'] fields = ['form_field', 'field_value']
class TestRecordItemSerializer(serializers.ModelSerializer):
class Meta:
model = TestRecordItem
fields = '__all__'
class TestRecordCreateSerializer(serializers.ModelSerializer): class TestRecordCreateSerializer(serializers.ModelSerializer):
record_data = TestRecordItemSerializer(many=True) record_data = TestRecordItemCreateSerializer(many=True)
class Meta: class Meta:
model = TestRecord model = TestRecord
fields = ['form', 'record_data', 'is_testok', 'fifo_item'] fields = ['form', 'record_data', 'is_testok', 'fifo_item']
@ -59,21 +64,21 @@ class TestRecordListSerializer(serializers.ModelSerializer):
class TestRecordDetailSerializer(serializers.ModelSerializer): class TestRecordDetailSerializer(serializers.ModelSerializer):
form_ = RecordFormSimpleSerializer(source='form', read_only=True) form_ = RecordFormSimpleSerializer(source='form', read_only=True)
record_data_ = serializers.SerializerMethodField() record_data_ = TestRecordItemSerializer(source='item_test_record', read_only=True, many=True)
class Meta: class Meta:
model = TestRecord model = TestRecord
fields = '__all__' fields = '__all__'
@staticmethod @staticmethod
def setup_eager_loading(queryset): def setup_eager_loading(queryset):
queryset = queryset.select_related('form','fifo_detail') queryset = queryset.select_related('form','fifo_item')
return queryset return queryset
def get_record_data_(self, obj): # def get_record_data_(self, obj):
record_data = obj.record_data # record_data = obj.record_data
all_fields = RecordFormField.objects.filter(form=obj.form, is_deletd=False).order_by('sort') # all_fields = RecordFormField.objects.filter(form=obj.form, is_deletd=False).order_by('sort')
all_fields_l = RecordFormFieldSerializer(instance=all_fields, many=True).data # all_fields_l = RecordFormFieldSerializer(instance=all_fields, many=True).data
for i in all_fields_l: # for i in all_fields_l:
key = i['field_key'] # key = i['field_key']
i['field_value'] = record_data.get(key, None) # i['field_value'] = record_data.get(key, None)
return all_fields_l # return all_fields_l

View File

@ -1,5 +1,5 @@
from apps.qm.serializers import StandardCreateUpdateSerializer, StandardSerializer, TestItemCreateUpdateSerializer, TestItemSerializer, TestRecordCreateSerializer, TestRecordDetailSerializer, TestRecordListSerializer from apps.qm.serializers import StandardCreateUpdateSerializer, StandardSerializer, TestItemCreateUpdateSerializer, TestItemSerializer, TestRecordCreateSerializer, TestRecordDetailSerializer, TestRecordListSerializer
from apps.qm.models import Standard, TestItem, TestRecord from apps.qm.models import Standard, TestItem, TestRecord, TestRecordItem
from django.shortcuts import render from django.shortcuts import render
from rest_framework.viewsets import ModelViewSet from rest_framework.viewsets import ModelViewSet
from apps.system.mixins import CreateUpdateModelAMixin from apps.system.mixins import CreateUpdateModelAMixin
@ -57,7 +57,22 @@ class TestRecordViewSet(ModelViewSet):
return super().get_serializer_class() return super().get_serializer_class()
def perform_create(self, serializer): def perform_create(self, serializer):
vdata = serializer.validated_data
obj = serializer.save(create_by = self.request.user) obj = serializer.save(create_by = self.request.user)
tris = []
for m in vdata['record_data']: # 保存记录详情
form_field = m['form_field']
m['field_name'] = form_field.field_name
m['field_key'] = form_field.field_key
m['field_type'] = form_field.field_type
m['field_value'] = m['field_value']
m['sort'] = form_field.sort
m['need_judge'] = form_field.need_judge
m['is_testok'] = m['is_testok'] if 'is_testok' in m else True
m['test_record'] = obj
tris.append(TestRecordItem(**m))
TestRecordItem.objects.bulk_create(tris)
# 如果检测合格 # 如果检测合格
if obj.fifo_item: if obj.fifo_item:
obj.fifo_item.is_testok = True if obj.is_testok else False obj.fifo_item.is_testok = True if obj.is_testok else False

View File

@ -178,7 +178,7 @@ class DoFormSubmit(CreateAPIView, GenericAPIView):
m['field_name'] = form_field.field_name m['field_name'] = form_field.field_name
m['field_key'] = form_field.field_key m['field_key'] = form_field.field_key
m['field_type'] = form_field.field_type m['field_type'] = form_field.field_type
m['field_value'] = form_field.field_value m['field_value'] = m['field_value']
m['sort'] = form_field.sort m['sort'] = form_field.sort
m['wproduct_record'] = wr m['wproduct_record'] = wr
wrds.append(WProductRecordItem(**m)) wrds.append(WProductRecordItem(**m))