151 lines
6.6 KiB
Python
151 lines
6.6 KiB
Python
from rest_framework import serializers
|
|
from apps.mtm.models import RecordForm, RecordFormField
|
|
from apps.mtm.serializers import RecordFormFieldSerializer, RecordFormSimpleSerializer
|
|
from apps.system.serializers import FileSimpleSerializer, UserSimpleSerializer, UserStandardSerializer
|
|
from apps.wpm.serializers import WProductBaseSerializer
|
|
from .models import Standard, TestItem, TestRecord, TestRecordItem
|
|
from django.db import transaction
|
|
|
|
class StandardCreateUpdateSerializer(serializers.ModelSerializer):
|
|
class Meta:
|
|
model = Standard
|
|
fields = ['name', 'file', 'enabled', 'number']
|
|
|
|
class StandardSerializer(serializers.ModelSerializer):
|
|
file_ = FileSimpleSerializer(source='file', read_only=True)
|
|
class Meta:
|
|
model = Standard
|
|
fields = '__all__'
|
|
|
|
class StandardSimpleSerializer(serializers.ModelSerializer):
|
|
class Meta:
|
|
model = Standard
|
|
fields = ['id', 'name', 'number']
|
|
|
|
class TestItemCreateUpdateSerializer(serializers.ModelSerializer):
|
|
class Meta:
|
|
model = TestItem
|
|
fields = ['name', 'standard', 'term_number']
|
|
|
|
class TestItemSerializer(serializers.ModelSerializer):
|
|
standard_ = StandardSimpleSerializer(source='standard', read_only=True)
|
|
class Meta:
|
|
model = TestItem
|
|
fields = '__all__'
|
|
|
|
class AnalysisItemSerializer(serializers.ModelSerializer):
|
|
pass
|
|
|
|
|
|
class TestRecordItemCreateSerializer(serializers.ModelSerializer):
|
|
class Meta:
|
|
model = TestRecordItem
|
|
fields = ['form_field', 'field_value', 'is_testok']
|
|
|
|
class TestRecordItemUpdateSerializer(serializers.ModelSerializer):
|
|
class Meta:
|
|
model = TestRecordItem
|
|
fields = ['id', 'field_value', 'is_testok', 'is_hidden']
|
|
|
|
|
|
class TestRecordItemSerializer(serializers.ModelSerializer):
|
|
field_key = serializers.CharField(source='form_field.field_key', read_only=True)
|
|
field_name = serializers.CharField(source='form_field.field_name', read_only=True)
|
|
field_type = serializers.CharField(source='form_field.field_type', read_only=True)
|
|
need_judge = serializers.BooleanField(source='form_field.need_judge', read_only=True)
|
|
field_choice = serializers.JSONField(source='form_field.field_choice', read_only=True)
|
|
rule_expression = serializers.JSONField(source='form_field.rule_expression', read_only=True)
|
|
display_expression = serializers.JSONField(source='form_field.display_expression', read_only=True)
|
|
is_hidden = serializers.BooleanField(source='form_field.is_hidden', read_only=True)
|
|
parent = serializers.PrimaryKeyRelatedField(source='form_field.parent', read_only=True)
|
|
help_text = serializers.CharField(source='form_field.help_text', read_only=True)
|
|
sort = serializers.IntegerField(source='form_field.sort', read_only=True)
|
|
draw_template = serializers.CharField(source='form_field.draw_template', read_only=True)
|
|
class Meta:
|
|
model = TestRecordItem
|
|
fields = '__all__'
|
|
|
|
class TestRecordShortSerializer(serializers.ModelSerializer):
|
|
class Meta:
|
|
model = TestRecord
|
|
fields = ['id', 'form', 'is_testok', 'is_submited']
|
|
class TestRecordCreateSerializer(serializers.ModelSerializer):
|
|
record_data = TestRecordItemCreateSerializer(many=True)
|
|
class Meta:
|
|
model = TestRecord
|
|
fields = ['form', 'record_data', 'is_testok', 'fifo_item']
|
|
|
|
class TestRecordListSerializer(serializers.ModelSerializer):
|
|
form_ = RecordFormSimpleSerializer(source='form', read_only=True)
|
|
create_by_ = UserSimpleSerializer(source='create_by', read_only=True)
|
|
class Meta:
|
|
model = TestRecord
|
|
fields = '__all__'
|
|
|
|
class TestRecordDetailBaseSerializer(serializers.ModelSerializer):
|
|
form_ = RecordFormSimpleSerializer(source='form', read_only=True)
|
|
record_data = serializers.SerializerMethodField()
|
|
create_by_ = UserSimpleSerializer(source='create_by', read_only=True)
|
|
class Meta:
|
|
model = TestRecord
|
|
fields = '__all__'
|
|
|
|
def get_record_data(self, obj):
|
|
return TestRecordItemSerializer(instance=obj.item_test_record.order_by('form_field__sort'), many=True).data
|
|
|
|
class TestRecordDetailSerializer(serializers.ModelSerializer):
|
|
form_ = RecordFormSimpleSerializer(source='form', read_only=True)
|
|
# record_data = TestRecordItemSerializer(source='item_test_record', read_only=True, many=True)
|
|
record_data = serializers.SerializerMethodField()
|
|
origin_test_ = TestRecordDetailBaseSerializer(source='origin_test', read_only=True)
|
|
create_by_ = UserStandardSerializer(source='create_by', read_only=True)
|
|
update_by_ = UserStandardSerializer(source='update_by', read_only=True)
|
|
wproduct_ = WProductBaseSerializer(source='wproduct', read_only=True)
|
|
class Meta:
|
|
model = TestRecord
|
|
fields = '__all__'
|
|
|
|
def get_record_data(self, obj):
|
|
return TestRecordItemSerializer(instance=obj.item_test_record.order_by('form_field__sort'), many=True).data
|
|
|
|
def to_representation(self, instance):
|
|
ret = super().to_representation(instance)
|
|
if instance.origin_test and instance.type == TestRecord.TEST_PROCESS_RE:
|
|
origin_test = ret['origin_test_']
|
|
o_dict = {}
|
|
for i in origin_test['record_data']:
|
|
o_dict[i['field_key']] = i['field_value']
|
|
for i in ret['record_data']:
|
|
i['origin_value'] = o_dict[i['field_key']] if i['field_key'] in o_dict else None
|
|
return super().to_representation(instance)
|
|
|
|
class TestRecordItemUpdatexSerializer(serializers.Serializer):
|
|
id = serializers.PrimaryKeyRelatedField(queryset=TestRecordItem.objects.all())
|
|
field_value = serializers.JSONField(allow_null=True, required=False)
|
|
is_testok = serializers.BooleanField(allow_null=True, required=False)
|
|
is_hidden = serializers.BooleanField(default=False)
|
|
|
|
class TestRecordUpdateSerializer(serializers.ModelSerializer):
|
|
record_data = TestRecordItemUpdatexSerializer(many=True, write_only=True)
|
|
class Meta:
|
|
model = TestRecord
|
|
fields = ['is_testok', 'record_data', 'number', 'remark']
|
|
|
|
def update(self, instance, validated_data):
|
|
# 获取更新人
|
|
update_by = self.context['request'].user
|
|
record_data = validated_data.pop('record_data')
|
|
for attr, value in validated_data.items():
|
|
setattr(instance, attr, value)
|
|
instance.update_by = update_by
|
|
instance.save()
|
|
for i in record_data:
|
|
tri = i['id']
|
|
tri.is_testok = i['is_testok']
|
|
tri.is_hidden = i['is_hidden']
|
|
tri.field_value = i['field_value']
|
|
if i['field_value'] != tri.field_value:
|
|
tri.update_by = update_by
|
|
tri.save()
|
|
return instance
|