Skip to content

Commit a1f82e7

Browse files
committed
Transfer model uses new ExportTransfertsCSVService instead of Exportable module
1 parent 1cb1990 commit a1f82e7

File tree

3 files changed

+59
-15
lines changed

3 files changed

+59
-15
lines changed

app/controllers/transfers_controller.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ def index
1515
@to_storage_locations = StorageLocation.with_transfers_to(current_organization)
1616
respond_to do |format|
1717
format.html
18-
format.csv { send_data Transfer.generate_csv(@transfers), filename: "Transfers-#{Time.zone.today}.csv" }
18+
format.csv { send_data Exports::ExportTransfersCSVService.new(transfers: @transfers, organization: current_organization).generate_csv, filename: "Transfers-#{Time.zone.today}.csv" }
1919
end
2020
end
2121

app/models/transfer.rb

Lines changed: 0 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@ class Transfer < ApplicationRecord
1919

2020
include Itemizable
2121
include Filterable
22-
include Exportable
2322
# to make it play nice with Itemizable - alias of `from`
2423
belongs_to :storage_location, class_name: "StorageLocation", inverse_of: :transfers_from, foreign_key: :from_id
2524
scope :from_location, ->(location_id) { where(from_id: location_id) }
@@ -31,19 +30,6 @@ class Transfer < ApplicationRecord
3130
validate :from_storage_quantities
3231
validate :line_items_quantity_is_positive
3332

34-
def self.csv_export_headers
35-
["From", "To", "Comment", "Total Moved"]
36-
end
37-
38-
def csv_export_attributes
39-
[
40-
from.name,
41-
to.name,
42-
comment || "none",
43-
line_items.total
44-
]
45-
end
46-
4733
private
4834

4935
def storage_locations_belong_to_organization
Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
module Exports
2+
class ExportTransfersCSVService
3+
def initialize(transfers:, organization:)
4+
@transfers = transfers
5+
@organization = organization
6+
end
7+
8+
def generate_csv
9+
csv_data = generate_csv_data
10+
11+
CSV.generate(headers: true) do |csv|
12+
csv_data.each { |row| csv << row }
13+
end
14+
end
15+
16+
def generate_csv_data
17+
csv_data = []
18+
19+
csv_data << headers
20+
@transfers.each do |transfer|
21+
csv_data << build_row_data(transfer)
22+
end
23+
24+
csv_data
25+
end
26+
27+
private
28+
29+
def headers
30+
base_headers
31+
end
32+
33+
def base_table
34+
{
35+
"From" => ->(transfer) {
36+
transfer.from.name
37+
},
38+
"To" => ->(transfer) {
39+
transfer.to.name
40+
},
41+
"Comment" => ->(transfer) {
42+
transfer.comment || "none"
43+
},
44+
"Total Moved" => ->(transfer) {
45+
transfer.line_items.total
46+
}
47+
}
48+
end
49+
50+
def base_headers
51+
base_table.keys
52+
end
53+
54+
def build_row_data(transfer)
55+
base_table.values.map { |closure| closure.call(transfer) }
56+
end
57+
end
58+
end

0 commit comments

Comments
 (0)