create.rb 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. # Copyright (C) 2012-2024 Zammad Foundation, https://zammad-foundation.org/
  2. class FormUpdater::Updater::Ticket::Create < FormUpdater::Updater
  3. include FormUpdater::Concerns::AppliesTaskbarState
  4. include FormUpdater::Concerns::AppliesTicketTemplate
  5. include FormUpdater::Concerns::AppliesTicketSharedDraft
  6. include FormUpdater::Concerns::ChecksCoreWorkflow
  7. include FormUpdater::Concerns::HasSecurityOptions
  8. include FormUpdater::Concerns::ProvidesInitialValues
  9. include FormUpdater::Concerns::StoresTaskbarState
  10. core_workflow_screen 'create_middle'
  11. def object_type
  12. ::Ticket
  13. end
  14. def initial_values
  15. values = {
  16. 'priority_id' => ::Ticket::Priority.find_by(default_create: true)&.id
  17. }
  18. customer_id = meta.dig(:additional_data, 'customer_id')
  19. customer_user = ::User.find_by(id: customer_id)
  20. if customer_user
  21. values['customer_id'] = customer_id
  22. customer_object = customer_user.attributes
  23. .slice('active', 'email', 'firstname', 'fullname', 'image', 'lastname', 'mobile', 'out_of_office', 'out_of_office_end_at', 'out_of_office_start_at', 'phone', 'source', 'vip')
  24. .merge({
  25. '__typename' => 'User',
  26. 'id' => Gql::ZammadSchema.id_from_internal_id('User', customer_id),
  27. })
  28. # For customer_id we need also to add the user as an option.
  29. # TODO: maybe we can have some generic way for this, because we are also have it in other places (e.g. applies tempalte).
  30. result['customer_id'] ||= {}
  31. result['customer_id'][:options] = [{
  32. value: customer_id,
  33. label: customer_user.fullname.presence || customer_user.phone.presence || customer_user.login,
  34. heading: customer_user.organization&.name,
  35. object: customer_object
  36. }]
  37. end
  38. values
  39. end
  40. end