app/views/opportunities/index.xls.builder
# frozen_string_literal: true
xml.Worksheet 'ss:Name' => I18n.t(:tab_opportunities) do
xml.Table do
unless @opportunities.empty?
# Header.
xml.Row do
heads = [I18n.t('id'),
I18n.t('user'),
I18n.t('campaign'),
I18n.t('assigned_to'),
I18n.t('account'),
I18n.t('name'),
I18n.t('access'),
I18n.t('source'),
I18n.t('stage'),
I18n.t('probability'),
I18n.t('amount'),
I18n.t('discount'),
I18n.t('weighted_amount'),
I18n.t('option_closes_on'),
I18n.t('date_created'),
I18n.t('date_updated')]
# Append custom field labels to header
Opportunity.fields.each do |field|
heads << field.label
end
heads.each do |head|
xml.Cell do
xml.Data head,
'ss:Type' => 'String'
end
end
end
# Opportunity rows.
@opportunities.each do |opportunity|
xml.Row do
data = [opportunity.id,
opportunity.user.try(:name),
opportunity.campaign.try(:name),
opportunity.assignee.try(:name),
opportunity.account.try(:name),
opportunity.name,
opportunity.access,
opportunity.source,
opportunity.stage,
opportunity.probability,
opportunity.amount,
opportunity.discount,
opportunity.weighted_amount,
opportunity.closes_on,
opportunity.created_at,
opportunity.updated_at]
# Append custom field values.
Opportunity.fields.each do |field|
data << opportunity.send(field.name)
end
data.each do |value|
xml.Cell do
xml.Data value,
'ss:Type' => (value.respond_to?(:abs) ? 'Number' : 'String').to_s
end
end
end
end
end
end
end