require 'csv' class OrderCsv < RenderCsv def header [ OrderArticle.human_attribute_name(:units_to_order), Article.human_attribute_name(:order_number), Article.human_attribute_name(:name), Article.human_attribute_name(:unit), Article.human_attribute_name(:unit_quantity_short), ArticlePrice.human_attribute_name(:price), OrderArticle.human_attribute_name(:total_price) ] end def data @object.order_articles.ordered.includes(%i[article article_price]).all.map do |oa| yield [ oa.units_to_order, oa.article.order_number, oa.article.name, oa.article.unit, oa.price.unit_quantity > 1 ? oa.price.unit_quantity : nil, number_to_currency(oa.price.price * oa.price.unit_quantity), number_to_currency(oa.total_price) ] end end end