testrecord detail bug
This commit is contained in:
parent
9d4a75497d
commit
465d3cc6e9
|
@ -100,7 +100,7 @@ class TestRecordDetailSerializer(serializers.ModelSerializer):
|
|||
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']
|
||||
origin_test = ret['origin_test_']
|
||||
o_dict = {}
|
||||
for i in origin_test['record_data']:
|
||||
o_dict[i['field_key']] = i['field_value']
|
||||
|
|
|
@ -197,7 +197,7 @@ class Ticket(CommonBModel):
|
|||
('worked', '我处理的'),
|
||||
('cc', '抄送我的')
|
||||
)
|
||||
title = models.CharField('标题', max_length=500, blank=True, default='', help_text="工单标题")
|
||||
title = models.CharField('标题', max_length=500, null=True, blank=True, help_text="工单标题")
|
||||
workflow = models.ForeignKey(Workflow, on_delete=models.CASCADE, verbose_name='关联工作流')
|
||||
sn = models.CharField('流水号', max_length=25, help_text="工单的流水号")
|
||||
state = models.ForeignKey(State, on_delete=models.CASCADE, verbose_name='当前状态', related_name='ticket_state')
|
||||
|
|
|
@ -49,7 +49,7 @@ class TicketSimpleSerializer(serializers.ModelSerializer):
|
|||
fields = '__all__'
|
||||
|
||||
class TicketCreateSerializer(serializers.ModelSerializer):
|
||||
transition = serializers.IntegerField(label='流转ID')
|
||||
transition = serializers.PrimaryKeyRelatedField(queryset=Transition.objects.all(), write_only=True)
|
||||
class Meta:
|
||||
model=Ticket
|
||||
fields=['title','workflow', 'ticket_data', 'transition']
|
||||
|
|
|
@ -54,6 +54,13 @@ class WfService(object):
|
|||
"""
|
||||
return CustomField.objects.filter(is_deleted=False, workflow=workflow).order_by('sort')
|
||||
|
||||
@staticmethod
|
||||
def get_workflow_custom_fields_list(workflow:Workflow):
|
||||
"""
|
||||
获取工单字段key List
|
||||
"""
|
||||
return CustomField.objects.filter(is_deleted=False, workflow=workflow).order_by('sort').values_list('field_key', flat=True)
|
||||
|
||||
@classmethod
|
||||
def get_ticket_transitions(cls, ticket:Ticket):
|
||||
"""
|
||||
|
|
|
@ -137,14 +137,23 @@ class TicketViewSet(OptimizationMixin, CreateUpdateCustomMixin, CreateModelMixin
|
|||
rdata = request.data
|
||||
serializer = self.get_serializer(data=rdata)
|
||||
serializer.is_valid(raise_exception=True)
|
||||
start_state = WfService.get_workflow_start_state(rdata['workflow'])
|
||||
transition = Transition.objects.get(pk=rdata['transition'])
|
||||
ticket_data = rdata['ticket_data']
|
||||
vdata = serializer.validated_data #校验之后的数据
|
||||
start_state = WfService.get_workflow_start_state(vdata['workflow'])
|
||||
field_key_list = WfService.get_workflow_custom_fields_list(vdata['workflow'])
|
||||
transition = vdata['transition']
|
||||
ticket_data = vdata['ticket_data']
|
||||
#校验必填项
|
||||
if transition.field_require_check:
|
||||
for key, value in start_state.state_fields.items(): #校验必填项
|
||||
for key, value in start_state.state_fields.items():
|
||||
if value == State.STATE_FIELD_REQUIRED:
|
||||
if key not in ticket_data or not ticket_data[key]:
|
||||
raise APIException('字段{}必填'.format(key))
|
||||
save_ticket_data = {}
|
||||
# 只保存必填项以及可选项
|
||||
for key, vlaue in ticket_data:
|
||||
if key in field_key_list and key in start_state.state_fields and start_state.state_fields[key] in [
|
||||
State.STATE_FIELD_REQUIRED, State.STATE_FIELD_OPTIONAL]:
|
||||
save_ticket_data[key] = value
|
||||
ticket = serializer.save(state=start_state, create_by=request.user, act_state=Ticket.TICKET_ACT_STATE_DRAFT, belong_dept=request.user.dept) # 先创建出来
|
||||
|
||||
next_state = WfService.get_next_state_by_transition_and_ticket_info(ticket=ticket, transition=transition)
|
||||
|
@ -159,7 +168,7 @@ class TicketViewSet(OptimizationMixin, CreateUpdateCustomMixin, CreateModelMixin
|
|||
act_state = Ticket.TICKET_ACT_STATE_DRAFT
|
||||
else:
|
||||
act_state = Ticket.TICKET_ACT_STATE_ONGOING
|
||||
title = rdata.get('title', '')
|
||||
title = vdata['title']
|
||||
title_template = ticket.workflow.title_template
|
||||
if title_template:
|
||||
all_ticket_data = {**rdata, **rdata['ticket_data']}
|
||||
|
|
Loading…
Reference in New Issue