12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091 |
- # Copyright (C) 2012-2024 Zammad Foundation, https://zammad-foundation.org/
- module Import
- module OTRS
- class State
- include Import::Helper
- include Import::OTRS::Helper
- MAPPING = {
- ChangeTime: :updated_at,
- CreateTime: :created_at,
- Name: :name,
- ID: :id,
- ValidID: :active,
- Comment: :note,
- }.freeze
- def initialize(state)
- import(state)
- end
- private
- def import(state)
- return if skip?(state)
- create_or_update(map(state))
- end
- def create_or_update(state)
- return if updated?(state)
- create(state)
- end
- def skip?(state)
- if state['TypeName'].eql?('removed')
- log "skip Ticket::State.find_by(id: #{state[:id]}) due to state #{state['Name']} and state type #{state['TypeName']}"
- return true
- end
- false
- end
- def updated?(state)
- @local_state = ::Ticket::State.find_by(id: state[:id])
- return false if !@local_state
- log "update Ticket::State.find_by(id: #{state[:id]})"
- @local_state.update!(state)
- true
- end
- def create(state)
- log "add Ticket::State.find_by(id: #{state[:id]})"
- @local_state = ::Ticket::State.new(state)
- @local_state.id = state[:id]
- @local_state.save
- reset_primary_key_sequence('ticket_states')
- end
- def map(state)
- mapped_state_type_id = state_type_id(state)
- {
- created_by_id: 1,
- updated_by_id: 1,
- active: active?(state),
- state_type_id: mapped_state_type_id,
- ignore_escalation: ignore_escalation?(mapped_state_type_id)
- }
- .merge(from_mapping(state))
- end
- def state_type_id(state)
- map_type(state)
- ::Ticket::StateType.lookup(name: state['TypeName']).id
- end
- def ignore_escalation?(state_type_id)
- ::Ticket::StateType.names_in_category(:work_on).exclude?(::Ticket::StateType.lookup(id: state_type_id).name)
- end
- def map_type(state)
- return if state['TypeName'] != 'pending auto'
- state['TypeName'] = 'pending action'
- end
- end
- end
- end
|