operation record update

This commit is contained in:
caoqianming 2021-12-16 11:19:44 +08:00
parent 8c1c0fe2cf
commit 275b84d20e
4 changed files with 46 additions and 63 deletions

View File

@ -108,10 +108,11 @@ class TestRecordDetailSerializer(serializers.ModelSerializer):
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.ModelSerializer):
class Meta:
model = TestRecordItem
fields = ['form_field', 'field_value', 'is_hidden', 'is_testok']
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)
@ -123,23 +124,11 @@ class TestRecordUpdateSerializer(serializers.ModelSerializer):
record_data = validated_data.pop('record_data')
for attr, value in validated_data.items():
setattr(instance, attr, value)
instance.save(self.context['request'].user)
# 更新items
items = TestRecordItem.objects.filter(test_record=instance, is_deleted=False)
for m in record_data: # 保存或创建记录详情
form_field = m['form_field']
for i in items:
if i.form_field == form_field:
# 更新操作
i.field_value = m['field_value']
i.is_testok = m['is_testok']
i.is_hidden = m['is_hidden']
i.save()
else:
TestRecordItem.objects.create(
form_field=form_field,
field_value=m['field_value'],
is_testok = m['is_testok'],
is_hidden = m['is_hidden'],
test_record=instance)
instance.save()
for i in record_data:
tri = i['id']
tri.field_value = i['field_value']
tri.is_testok = i['is_testok']
tri.is_hidden = i['is_hidden']
tri.save()
return instance

View File

@ -187,9 +187,9 @@ class OperationRecordItem(BaseModel):
"""
记录表格字段值
"""
form_field = models.ForeignKey(RecordFormField, verbose_name='关联字段', on_delete=models.CASCADE, db_constraint=False)
form_field = models.ForeignKey(RecordFormField, verbose_name='关联字段', on_delete=models.CASCADE, related_name='ori_form_field')
field_value = models.JSONField('录入值', default=dict, blank=True)
operation_record = models.ForeignKey(OperationRecord, verbose_name='关联的生产记录', on_delete=models.CASCADE)
operation_record = models.ForeignKey(OperationRecord, verbose_name='关联的生产记录', on_delete=models.CASCADE, related_name='item_operation_record')
class OperationEquip(BaseModel):
operation = models.ForeignKey(Operation, verbose_name='关联操作', on_delete=models.CASCADE, related_name='oe_operation')

View File

@ -244,19 +244,18 @@ class DoOutputSerializer(serializers.Serializer):
material = serializers.PrimaryKeyRelatedField(queryset=Material.objects.all(), label='物料ID')
count_output = serializers.IntegerField(min_value=0, label='产出数量')
class OperationRecordItemSerializer(serializers.ModelSerializer):
class Meta:
model = OperationRecordItem
fields = ['form_field', 'field_value']
class OperationRecordItemUpdateSerializer(serializers.Serializer):
id = serializers.PrimaryKeyRelatedField(queryset=OperationRecordItem.objects.all())
field_value = serializers.JSONField(allow_null=True, required=False)
class OperationRecordSubmitSerializer(serializers.ModelSerializer):
record_data = OperationRecordItemSerializer(many=True)
record_data = OperationRecordItemUpdateSerializer(many=True)
class Meta:
model = OperationRecord
fields = ['record_data']
class OperationRecordSerializer(serializers.ModelSerializer):
record_data = OperationRecordItemSerializer(many=True)
record_data = OperationRecordItemUpdateSerializer(many=True)
class Meta:
model = OperationRecord
fields = ['form', 'record_data']
@ -392,4 +391,25 @@ class OperationMaterialCreate3Serializer(serializers.ModelSerializer):
validated_data['type'] = SubprodctionMaterial.SUB_MA_TYPE_TOOL
return super().create(validated_data)
class OperationRecordItemSerializer(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)
is_hidden = serializers.BooleanField(source='form_field.is_hidden', 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)
class Meta:
model = OperationRecordItem
fields = '__all__'
class OperationRecordDetailSerializer(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 = OperationRecord
fields = '__all__'
def get_record_data(self, obj):
return OperationRecordItemSerializer(instance=obj.item_operation_record.order_by('form_field__sort'), many=True).data

View File

@ -408,13 +408,8 @@ class OperationViewSet(ListModelMixin, RetrieveModelMixin, CreateModelMixin, Upd
opr.operation = op
opr.form = i
opr.is_filled = False
opri_list = []
for m in RecordFormField.objects.filter(form=i, is_deleted=False):
opri_dict = {}
opri_dict['form_field'] = m
opri_dict['operation_record'] = opr
opri_list.append(OperationRecordItem(**opri_dict))
OperationRecordItem.objects.bulk_create(opri_list)
OperationRecordItem.objects.create(operation_record=opr, form_field=m)
opr.save()
# 查询需要使用的生产设备
for i in step.equipments.all():
@ -604,16 +599,6 @@ class OperationRecordViewSet(ListModelMixin, DestroyModelMixin, UpdateModelMixin
instance.delete()
return Response()
@action(methods=['get'], detail=True, perms_map={'get':'*'})
def init(self, request, pk=None):
'''
表格初始化
'''
obj = self.get_object()
data = RecordFormDetailSerializer(instance=obj.form).data
# 后续加入系统带入数据
return Response(data)
def update(self, request, *args, **kwargs):
serializer = OperationRecordSubmitSerializer(data=request.data)
@ -622,21 +607,10 @@ class OperationRecordViewSet(ListModelMixin, DestroyModelMixin, UpdateModelMixin
opr = self.get_object()
if opr.operation.is_submited:
raise exceptions.APIException('操作已提交不可修改')
# 已存在信息
items = OperationRecordItem.objects.filter(operation_record=opr, is_deleted=False)
for m in vdata['record_data']: # 保存或创建记录详情
form_field = m['form_field']
for i in items:
if i.form_field == form_field:
# 更新操作
i.field_value = m['field_value']
i.save()
else:
OperationRecordItem.objects.create(
form_field=form_field,
field_value=m['field_value'],
operation_record=opr)
for i in vdata['record_data']:
ori = i['id']
ori.field_value = i['field_value']
ori.save()
opr.is_filled = True
opr.update_by = request.user
opr.save()