123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137 |
- module Import
- module OTRS
- module StateFactory
- extend Import::TransactionFactory
- # rubocop:disable Style/ModuleFunction
- extend self
- def pre_import_hook(_records, *_args)
- backup
- end
- def backup
- # rename states to handle not uniq issues
- ::Ticket::State.all.each do |state|
- state.name = state.name + '_tmp'
- state.save
- end
- end
- def import_loop(records, *_args, &import_block)
- super
- update_attribute_settings
- end
- def update_attribute_settings
- return if Import::OTRS.diff?
- update_attribute
- update_ticket_attributes
- end
- def update_attribute
- update_default_create
- update_default_follow_up
- end
- def update_default_create
- state = ::Ticket::State.find_by(
- name: Import::OTRS::SysConfigFactory.postmaster_default_lookup(:state_default_create),
- active: true
- )
- return if !state
- state.default_create = true
- state.save!
- end
- def update_default_follow_up
- state = ::Ticket::State.find_by(
- name: Import::OTRS::SysConfigFactory.postmaster_default_lookup(:state_default_follow_up),
- active: true
- )
- return if !state
- state.default_follow_up = true
- state.save!
- end
- def update_ticket_attributes
- update_ticket_state
- update_ticket_pending_time
- reseed_dependent_objects
- end
- def update_ticket_state
- agent_new = ::Ticket::State.where(
- state_type_id: ::Ticket::StateType.where.not(name: %w[merged removed])
- ).pluck(:id)
- agent_edit = ::Ticket::State.where(
- state_type_id: ::Ticket::StateType.where.not(name: %w[new merged removed])
- ).pluck(:id)
- customer_new = ::Ticket::State.where(
- state_type_id: ::Ticket::StateType.where.not(name: %w[new closed])
- ).pluck(:id)
- customer_edit = ::Ticket::State.where(
- state_type_id: ::Ticket::StateType.where.not(name: %w[open closed])
- ).pluck(:id)
- ticket_state_id = ::ObjectManager::Attribute.get(
- object: 'Ticket',
- name: 'state_id',
- )
- ticket_state_id[:data_option][:filter] = agent_new
- ticket_state_id[:screens][:create_middle][:Customer] = customer_new
- ticket_state_id[:screens][:edit][:Agent] = agent_edit
- ticket_state_id[:screens][:edit][:Customer] = customer_edit
- update_ticket_attribute(ticket_state_id)
- end
- def update_ticket_pending_time
- pending_state_ids = ::Ticket::State.where(
- state_type_id: ::Ticket::StateType.where(name: ['pending reminder', 'pending action'])
- ).pluck(:id)
- ticket_pending_time = ::ObjectManager::Attribute.get(
- object: 'Ticket',
- name: 'pending_time',
- )
- ticket_pending_time[:data_option][:required_if][:state_id] = pending_state_ids
- ticket_pending_time[:data_option][:required_if][:state_id] = pending_state_ids
- update_ticket_attribute(ticket_pending_time)
- end
- def update_ticket_attribute(attribute)
- ::ObjectManager::Attribute.add(
- object_lookup_id: attribute[:object_lookup_id],
- name: attribute[:name],
- display: attribute[:display],
- data_type: attribute[:data_type],
- data_option: attribute[:data_option],
- active: attribute[:active],
- screens: attribute[:screens],
- force: true # otherwise _id as a name is not permitted
- )
- end
- def reseed_dependent_objects
- Overview.reseed
- Trigger.reseed
- Macro.reseed
- # we don't have to re-seed the ObjectManager
- # Attributes since they contain the already
- # imported DynamicFields which will be lost
- ObjectManager::Attribute.seed
- end
- end
- end
- end
|