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):
|
def to_representation(self, instance):
|
||||||
ret = super().to_representation(instance)
|
ret = super().to_representation(instance)
|
||||||
if instance.origin_test and instance.type == TestRecord.TEST_PROCESS_RE:
|
if instance.origin_test and instance.type == TestRecord.TEST_PROCESS_RE:
|
||||||
origin_test = ret['origin_test']
|
origin_test = ret['origin_test_']
|
||||||
o_dict = {}
|
o_dict = {}
|
||||||
for i in origin_test['record_data']:
|
for i in origin_test['record_data']:
|
||||||
o_dict[i['field_key']] = i['field_value']
|
o_dict[i['field_key']] = i['field_value']
|
||||||
|
|
|
@ -197,7 +197,7 @@ class Ticket(CommonBModel):
|
||||||
('worked', '我处理的'),
|
('worked', '我处理的'),
|
||||||
('cc', '抄送我的')
|
('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='关联工作流')
|
workflow = models.ForeignKey(Workflow, on_delete=models.CASCADE, verbose_name='关联工作流')
|
||||||
sn = models.CharField('流水号', max_length=25, help_text="工单的流水号")
|
sn = models.CharField('流水号', max_length=25, help_text="工单的流水号")
|
||||||
state = models.ForeignKey(State, on_delete=models.CASCADE, verbose_name='当前状态', related_name='ticket_state')
|
state = models.ForeignKey(State, on_delete=models.CASCADE, verbose_name='当前状态', related_name='ticket_state')
|
||||||
|
|
|
@ -49,7 +49,7 @@ class TicketSimpleSerializer(serializers.ModelSerializer):
|
||||||
fields = '__all__'
|
fields = '__all__'
|
||||||
|
|
||||||
class TicketCreateSerializer(serializers.ModelSerializer):
|
class TicketCreateSerializer(serializers.ModelSerializer):
|
||||||
transition = serializers.IntegerField(label='流转ID')
|
transition = serializers.PrimaryKeyRelatedField(queryset=Transition.objects.all(), write_only=True)
|
||||||
class Meta:
|
class Meta:
|
||||||
model=Ticket
|
model=Ticket
|
||||||
fields=['title','workflow', 'ticket_data', 'transition']
|
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')
|
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
|
@classmethod
|
||||||
def get_ticket_transitions(cls, ticket:Ticket):
|
def get_ticket_transitions(cls, ticket:Ticket):
|
||||||
"""
|
"""
|
||||||
|
|
|
@ -137,14 +137,23 @@ class TicketViewSet(OptimizationMixin, CreateUpdateCustomMixin, CreateModelMixin
|
||||||
rdata = request.data
|
rdata = request.data
|
||||||
serializer = self.get_serializer(data=rdata)
|
serializer = self.get_serializer(data=rdata)
|
||||||
serializer.is_valid(raise_exception=True)
|
serializer.is_valid(raise_exception=True)
|
||||||
start_state = WfService.get_workflow_start_state(rdata['workflow'])
|
vdata = serializer.validated_data #校验之后的数据
|
||||||
transition = Transition.objects.get(pk=rdata['transition'])
|
start_state = WfService.get_workflow_start_state(vdata['workflow'])
|
||||||
ticket_data = rdata['ticket_data']
|
field_key_list = WfService.get_workflow_custom_fields_list(vdata['workflow'])
|
||||||
|
transition = vdata['transition']
|
||||||
|
ticket_data = vdata['ticket_data']
|
||||||
|
#校验必填项
|
||||||
if transition.field_require_check:
|
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 value == State.STATE_FIELD_REQUIRED:
|
||||||
if key not in ticket_data or not ticket_data[key]:
|
if key not in ticket_data or not ticket_data[key]:
|
||||||
raise APIException('字段{}必填'.format(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) # 先创建出来
|
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)
|
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
|
act_state = Ticket.TICKET_ACT_STATE_DRAFT
|
||||||
else:
|
else:
|
||||||
act_state = Ticket.TICKET_ACT_STATE_ONGOING
|
act_state = Ticket.TICKET_ACT_STATE_ONGOING
|
||||||
title = rdata.get('title', '')
|
title = vdata['title']
|
||||||
title_template = ticket.workflow.title_template
|
title_template = ticket.workflow.title_template
|
||||||
if title_template:
|
if title_template:
|
||||||
all_ticket_data = {**rdata, **rdata['ticket_data']}
|
all_ticket_data = {**rdata, **rdata['ticket_data']}
|
||||||
|
|
Loading…
Reference in New Issue