class Budget::Investment::Exporter require "csv" include JsonExporter 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 def model Budget::Investment 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}" if investment.feasible? "#{I18n.t(price_string)} (#{investment.formatted_price})" else I18n.t(price_string) end end def json_values(investment) { id: investment.id, title: investment.title, description: strip_tags(investment.description) } end end