From a783156b611111f367cd1a3b677fdf3c708e3f2a Mon Sep 17 00:00:00 2001 From: Martin Whitehouse Date: Mon, 25 Jul 2022 04:01:27 +0200 Subject: [PATCH] Add `merge_ticket_values` helper Extract a large portion of code from `merge_tickets` --- helpdesk/views/staff.py | 58 +++++++++++++++++++++++------------------ 1 file changed, 33 insertions(+), 25 deletions(-) diff --git a/helpdesk/views/staff.py b/helpdesk/views/staff.py index 8702e0b2..88f1e130 100644 --- a/helpdesk/views/staff.py +++ b/helpdesk/views/staff.py @@ -1000,6 +1000,37 @@ ticket_attributes = ( ) +def merge_ticket_values( + request: WSGIRequest, + tickets: typing.List[Ticket], + custom_fields +) -> None: + for ticket in tickets: + ticket.values = {} + # Prepare the value for each attributes of this ticket + for attribute, __ in ticket_attributes: + value = getattr(ticket, attribute, TicketCustomFieldValue.default_value) + # Check if attr is a get_FIELD_display + if attribute.startswith('get_') and attribute.endswith('_display'): + # Hack to call methods like get_FIELD_display() + value = getattr(ticket, attribute, TicketCustomFieldValue.default_value)() + ticket.values[attribute] = { + 'value': value, + 'checked': str(ticket.id) == request.POST.get(attribute) + } + # Prepare the value for each custom fields of this ticket + for custom_field in custom_fields: + try: + value = ticket.ticketcustomfieldvalue_set.get( + field=custom_field).value + except (TicketCustomFieldValue.DoesNotExist, ValueError): + value = TicketCustomFieldValue.default_value + ticket.values[custom_field.name] = { + 'value': value, + 'checked': str(ticket.id) == request.POST.get(custom_field.name) + } + + @staff_member_required def merge_tickets(request): """ @@ -1014,31 +1045,8 @@ def merge_tickets(request): tickets = ticket_select_form.cleaned_data.get('tickets') custom_fields = CustomField.objects.all() - default = _('Not defined') - for ticket in tickets: - ticket.values = {} - # Prepare the value for each attributes of this ticket - for attribute, __ in ticket_attributes: - value = getattr(ticket, attribute, default) - # Check if attr is a get_FIELD_display - if attribute.startswith('get_') and attribute.endswith('_display'): - # Hack to call methods like get_FIELD_display() - value = getattr(ticket, attribute, default)() - ticket.values[attribute] = { - 'value': value, - 'checked': str(ticket.id) == request.POST.get(attribute) - } - # Prepare the value for each custom fields of this ticket - for custom_field in custom_fields: - try: - value = ticket.ticketcustomfieldvalue_set.get( - field=custom_field).value - except (TicketCustomFieldValue.DoesNotExist, ValueError): - value = default - ticket.values[custom_field.name] = { - 'value': value, - 'checked': str(ticket.id) == request.POST.get(custom_field.name) - } + + merge_ticket_values(request, tickets, custom_fields) if request.method == 'POST': # Find which ticket has been chosen to be the main one