Source code
class Maintenance::ImportAgentPortCompaniesTask < MaintenanceTasks::Task
include ArrayHelper
csv_collection(in_batches: 50)
attribute :emails, :string
validates :emails, presence: true, fcm_email_format: true
CSV_COLUMNS = %w[company_guid tree_node_name brand_name crm_sales_id mbo_id mbo_name country_code status
errors].freeze
after_start :prepare_csv_path
after_complete :send_report
after_error :send_report
def process(batch_of_rows)
File.open(csv_path, 'a') do |file|
batch_of_rows.each do |row|
result = AgentPort::RowProcessor.new(row.to_h).call
file.puts build_csv_line(result)
end
end
end
def csv_path
@csv_path ||= Rails.root.join('tmp/import_agent_port_latest.csv').to_s
end
private
def prepare_csv_path
@csv_path = Rails.root.join('tmp', "import_agent_port_#{Time.now.to_i}.csv").to_s
File.write(@csv_path, CSV_COLUMNS.to_csv)
end
def send_report
return unless csv_path && File.exist?(csv_path)
CsvReportMailer.send_report(
recipients: emails_array(emails),
file_path: csv_path,
report_sender: 'Import AgentPort Companies'
).deliver_now
ensure
File.delete(csv_path) if csv_path && File.exist?(csv_path)
end
def build_csv_line(result)
CSV_COLUMNS.map { |col| %w[status errors].include?(col) ? result[col.to_sym] : result[:row][col] }.to_csv
end
end