1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374 |
- # Copyright (C) 2012-2024 Zammad Foundation, https://zammad-foundation.org/
- class Sequencer::Unit::Import::Freshdesk::Ticket::Mapping < Sequencer::Unit::Base
- include ::Sequencer::Unit::Import::Common::Mapping::Mixin::ProvideMapped
- uses :resource, :id_map
- # Since the imports rely on a fresh Zammad installation, we
- # can require the default priority and state names to be present.
- def priority_map
- @priority_map ||= {
- 1 => ::Ticket::Priority.find_by(name: '1 low')&.id, # low
- 2 => ::Ticket::Priority.find_by(name: '2 normal')&.id, # medium
- 3 => ::Ticket::Priority.find_by(name: '3 high')&.id, # high
- 4 => ::Ticket::Priority.find_by(name: '3 high')&.id, # urgent
- }.freeze
- end
- def state_map
- @state_map ||= {
- 2 => ::Ticket::State.find_by(name: 'open')&.id, # open
- 3 => ::Ticket::State.find_by(name: 'pending reminder')&.id, # pending
- 4 => ::Ticket::State.find_by(name: 'closed')&.id, # resolved
- 5 => ::Ticket::State.find_by(name: 'closed')&.id, # closed
- }.freeze
- end
- def process
- provide_mapped do
- {
- title: resource['subject'],
- number: resource['id'],
- group_id: group_id,
- priority_id: priority_id,
- state_id: state_id,
- owner_id: owner_id,
- customer_id: customer_id,
- type: resource['type'],
- created_at: resource['created_at'],
- updated_at: resource['updated_at'],
- }
- end
- end
- private
- def group_id
- id_map.dig('Group', resource['group_id']) || ::Group.find_by(name: 'Support')&.id || 1
- end
- def customer_id
- id_map['User'][resource['requester_id']]
- end
- def owner_id
- id_map['User'][resource['responder_id']]
- end
- def state_id
- state_map.fetch(resource['status'], default_state_id)
- end
- def priority_id
- priority_map.fetch(resource['priority'], default_priority_id)
- end
- def default_state_id
- @default_state_id ||= ::Ticket::State.find_by(name: 'open')&.id
- end
- def default_priority_id
- @default_priority_id ||= ::Ticket::Priority.find_by(name: '2 normal')&.id
- end
- end
|