Source code
class Maintenance::MigrateMidBackOfficeToEnumTask < MaintenanceTasks::Task
MBO_MAPPING = {
'protas' => MboProfiles::MidBackOffice::PROTAS,
'travelogix' => MboProfiles::MidBackOffice::TRAVELOGIX,
'lumina' => MboProfiles::MidBackOffice::LUMINA,
'd365' => MboProfiles::MidBackOffice::D365,
'partner' => MboProfiles::MidBackOffice::PARTNER,
'dynamics' => MboProfiles::MidBackOffice::D365,
'viaxeo' => MboProfiles::MidBackOffice::VIAXEO,
'travelsky' => MboProfiles::MidBackOffice::FCM_PLATFORM_CN,
'travcom' => MboProfiles::MidBackOffice::TRAVCOM,
'fcm_platform_cn' => MboProfiles::MidBackOffice::FCM_PLATFORM_CN
}.freeze
collection_batch_size(1000)
def collection
MboProfile.all
end
def process(element)
mapped_value = map_mid_back_office(element)
element.update_column(:mid_back_office, mapped_value)
rescue StandardError => e
Rails.logger.error("Failed to migrate MboProfile #{element.id}: #{e.message}")
end
private
def map_mid_back_office(element)
mapped_from_id(element) || mapped_current_mbo(element) || country_default(element) || MboProfiles::MidBackOffice::INHOUSE
end
def mapped_from_id(element)
return unless element.id
result = ActiveRecord::Base.connection.exec_query(
'SELECT mid_back_office_id FROM mbo_profiles WHERE id = $1 LIMIT 1',
'SQL',
[element.id]
)
mbo_id = result.rows.dig(0, 0)
return unless mbo_id
old_name_result = ActiveRecord::Base.connection.exec_query(
'SELECT name FROM mid_back_offices WHERE id = $1 LIMIT 1',
'SQL',
[mbo_id]
)
old_name = old_name_result.rows.dig(0, 0)&.to_s&.downcase
MBO_MAPPING[old_name]
end
def mapped_current_mbo(element)
MBO_MAPPING[element.mid_back_office.to_s.strip.downcase]
end
def country_default(element)
element.country&.default_mbo_to_country&.default_mbo
end
end