class Budget::Investment::Exporter require 'csv' def initialize(investments) @investments = investments end def to_csv CSV.generate(headers: true) do |csv| csv << headers @investments.each { |investment| csv << csv_values(investment) } end end private def headers [ I18n.t("admin.budget_investments.index.list.id"), I18n.t("admin.budget_investments.index.list.title"), I18n.t("admin.budget_investments.index.list.supports"), I18n.t("admin.budget_investments.index.list.admin"), I18n.t("admin.budget_investments.index.list.valuator"), I18n.t("admin.budget_investments.index.list.valuation_group"), I18n.t("admin.budget_investments.index.list.geozone"), I18n.t("admin.budget_investments.index.list.feasibility"), I18n.t("admin.budget_investments.index.list.valuation_finished"), I18n.t("admin.budget_investments.index.list.selected"), I18n.t("admin.budget_investments.index.list.visible_to_valuators"), I18n.t("admin.budget_investments.index.list.author_username") ] end def csv_values(investment) [ investment.id.to_s, investment.title, investment.total_votes.to_s, admin(investment), investment.assigned_valuators || '-', investment.assigned_valuation_groups || '-', investment.heading.name, price(investment), investment.valuation_finished? ? I18n.t('shared.yes') : I18n.t('shared.no'), investment.selected? ? I18n.t('shared.yes') : I18n.t('shared.no'), investment.visible_to_valuators? ? I18n.t('shared.yes') : I18n.t('shared.no'), investment.author.username ] end def admin(investment) if investment.administrator.present? investment.administrator.name else I18n.t("admin.budget_investments.index.no_admin_assigned") end end def price(investment) price_string = "admin.budget_investments.index.feasibility.#{investment.feasibility}" I18n.t(price_string, price: investment.formatted_price) end end