Skip to content

Commit 46a9070

Browse files
authored
Merge pull request #336 from xronos-ch/csv_download
Csv and JSON download
2 parents 1fcb224 + 4e7bed9 commit 46a9070

File tree

3 files changed

+52
-7
lines changed

3 files changed

+52
-7
lines changed

app/controllers/c14s_controller.rb

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,11 @@ def index
2525
unless c14_params.blank?
2626
@c14s = @c14s.where(c14_params)
2727
end
28-
28+
29+
# if params[:sample_attributes][:context_attributes][:site_id].present?
30+
# @c14s = @c14s.joins(sample: { context: :site }).where(sample:{context:{sites:{id: params[:sample_attributes][:context_attributes][:site_id]}}})
31+
# end
32+
2933
# order
3034
if params.has_key?(:c14s_order_by)
3135
order = { params[:c14s_order_by] => params.fetch(:c14s_order, "asc") }
@@ -159,7 +163,13 @@ def c14_params
159163
:position_y,
160164
:position_z,
161165
:position_crs
162-
]}
166+
]},
167+
sample: [
168+
:context_id,
169+
contexts: [
170+
:site_id
171+
]
172+
]
163173
)
164174
end
165175

app/controllers/data_controller.rb

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ def reset_manual_table_selection
1313

1414
def index
1515
@data = Data.new(filter_params, select_params)
16+
@raw_filter_params = filter_params
1617
logger.debug { "Parsed filters: #{@data.filters.inspect}" }
1718
@sites = @data.xrons.select("sites.id", "sites.lng", "sites.lat", "sites.name").distinct
1819

@@ -35,6 +36,20 @@ def index
3536
)
3637
) AS geojson from (" + @sites.to_sql+ ") AS subquery1) AS subquery2").to_sql)[0]['measurements'], adapter: nil, serializer: nil
3738
}
39+
format.csv {
40+
query = "COPY (SELECT * FROM data_views WHERE id IN (" + @data.xrons.pluck(:id).join(', ').to_s + ") ) TO STDOUT WITH CSV HEADER"
41+
42+
connection = ActiveRecord::Base.connection.raw_connection
43+
csv_data = ""
44+
45+
connection.copy_data(query) do
46+
while row = connection.get_copy_data
47+
csv_data << row
48+
end
49+
end
50+
51+
render plain: csv_data, content_type: 'text/csv', filename: "data_#{Date.today}.csv"
52+
}
3853
end
3954
end
4055

app/views/data/_toolbar.html.erb

Lines changed: 25 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -51,8 +51,8 @@
5151
<%= render "filter_status" %>
5252
</span>
5353

54+
<ul class="nav">
5455
<!--
55-
<ul class="nav ms-auto">
5656
<li class="nav-item dropdown">
5757
<a class="nav-link dropdown-toggle"
5858
id="dataTools"
@@ -67,6 +67,7 @@
6767
<li><a class="dropdown-item" href="#">Sum calibrate</a></li>
6868
</ul>
6969
</li>
70+
-->
7071
<li class="nav-item dropdown">
7172
<a class="nav-link dropdown-toggle"
7273
id="dataDownload"
@@ -77,11 +78,30 @@
7778
<%= bs_icon "download" %>
7879
Download
7980
</a>
80-
<ul class="dropdown-menu" aria-labelledby="dataDownload">
81-
<li><a class="dropdown-item" href="#">CSV</a></li>
82-
<li><a class="dropdown-item" href="#">XLSX</a></li>
81+
<ul class="dropdown-menu" aria-labelledby="dataDownload" style="padding:0px;">
82+
<li>
83+
<div class="d-grid gap-2">
84+
85+
<%= link_to data_path(format: :csv, filter: @raw_filter_params),
86+
class: "nav-link",
87+
title: "CSV",
88+
download: "data_#{Date.today}.csv" do %>
89+
<%=bs_icon("bi bi-filetype-csv")%> CSV
90+
<% end %>
91+
</div>
92+
</li>
93+
<li>
94+
<div class="d-grid gap-2">
95+
96+
<%= link_to data_path(format: :json, filter: @raw_filter_params),
97+
class: "nav-link",
98+
title: "JSON",
99+
download: "data_#{Date.today}.json" do %>
100+
<%=bs_icon("bi bi-filetype-json")%> JSON
101+
<% end%>
102+
</div>
103+
</li>
83104
</ul>
84105
</li>
85106
</ul>
86-
-->
87107
</div>

0 commit comments

Comments
 (0)