Skip to content

Commit c3c7127

Browse files
authored
Merge pull request #6367 from martinpovolny/report_cleanup3
More report cleanup
2 parents c5c9ebd + 96b7e74 commit c3c7127

File tree

2 files changed

+109
-81
lines changed

2 files changed

+109
-81
lines changed

app/controllers/application_controller/report_downloads.rb

Lines changed: 106 additions & 78 deletions
Original file line numberDiff line numberDiff line change
@@ -3,69 +3,71 @@ module ApplicationController::ReportDownloads
33

44
# Send the current report in text format
55
def render_txt
6-
@report = report_for_rendering
7-
filename = filename_timestamp(@report.title)
6+
report = report_for_rendering
7+
filename = filename_timestamp(report.title)
88
disable_client_cache
9-
send_data(@report.to_text,
10-
:filename => "#{filename}.txt")
9+
send_data(report.to_text, :filename => "#{filename}.txt")
1110
end
1211

1312
# Send the current report in csv format
1413
def render_csv
15-
@report = report_for_rendering
14+
report = report_for_rendering
1615
filename = filename_timestamp(@report.title)
1716
disable_client_cache
18-
send_data(@report.to_csv,
19-
:filename => "#{filename}.csv")
17+
send_data(report.to_csv, :filename => "#{filename}.csv")
2018
end
2119

22-
# Send the current report in pdf format
23-
def render_pdf(report = nil)
24-
@report = report || report_for_rendering
20+
def render_pdf_internal(report)
2521
userid = "#{session[:userid]}|#{request.session_options[:id]}|adhoc"
26-
@result = @report.build_create_results(:userid => userid)
22+
result = report.build_create_results(:userid => userid)
2723

28-
# Use @result frorm paging, if present
29-
@result ||= MiqReportResult.for_user(current_user).find(@sb[:pages][:rr_id]) if @sb[:pages]
24+
# Use result from paging, if present
25+
result ||= MiqReportResult.for_user(current_user).find(@sb[:pages][:rr_id]) if @sb[:pages]
3026
# Use report_result_id in session, if present
31-
@result ||= MiqReportResult.for_user(current_user).find(session[:report_result_id]) if session[:report_result_id]
27+
result ||= MiqReportResult.for_user(current_user).find(session[:report_result_id]) if session[:report_result_id]
3228

3329
disable_client_cache
3430

35-
@options = {
31+
@options = { # used by the layouts/print
3632
:page_layout => 'landscape',
37-
:page_size => @report.page_size || 'a4',
38-
:run_date => format_timezone(@report.report_run_time, @result.user_timezone, "gtl"),
39-
:title => @result.name
33+
:page_size => report.page_size || 'a4',
34+
:run_date => format_timezone(report.report_run_time, result.user_timezone, "gtl"),
35+
:title => result.name
4036
}
4137

42-
@data = @result.html_rows.join
38+
render(
39+
:template => '/layouts/print/report',
40+
:layout => '/layouts/print',
41+
:locals => {
42+
:report => report,
43+
:data => result.html_rows.join
44+
}
45+
)
46+
end
4347

44-
render :template => '/layouts/print/report', :layout => '/layouts/print'
48+
# Send the current report in pdf format
49+
def render_pdf
50+
render_pdf_internal(report_for_rendering)
4551
end
4652

4753
# Show the current widget report in pdf format
4854
def widget_to_pdf
4955
session[:report_result_id] = params[:rr_id]
50-
render_pdf
56+
render_pdf_internal(report_from_report_results(params[:rr_id]))
5157
end
5258

53-
# Render report in csv/txt/pdf format asynchronously
54-
def render_report_data
55-
render_type = RENDER_TYPES[params[:render_type]]
56-
assert_privileges("render_report_#{render_type}")
57-
unless params[:task_id] # First time thru, kick off the report generate task
58-
if render_type
59-
@sb[:render_type] = render_type
60-
rr = MiqReportResult.for_user(current_user).find(session[:report_result_id]) # Get report task id from the session
61-
task_id = rr.async_generate_result(@sb[:render_type], :userid => session[:userid],
62-
:session_id => request.session_options[:id])
63-
initiate_wait_for_task(:task_id => task_id)
64-
end
65-
return
59+
def render_report_data_init(render_type)
60+
if render_type
61+
@sb[:render_type] = render_type
62+
rr = MiqReportResult.for_user(current_user).find(session[:report_result_id]) # Get report task id from the session
63+
task_id = rr.async_generate_result(@sb[:render_type], :userid => session[:userid],
64+
:session_id => request.session_options[:id])
65+
initiate_wait_for_task(:task_id => task_id)
6666
end
67+
end
6768

68-
miq_task = MiqTask.find(params[:task_id])
69+
def render_report_data_continue(task_id)
70+
miq_task = MiqTask.find(task_id)
6971
if !miq_task.results_ready?
7072
add_flash(_("Report generation returned: Status [%{status}] Message [%{message}]") % {:status => miq_task.status, :message => miq_task.message}, :error)
7173
javascript_flash(:spinner_off => true)
@@ -82,86 +84,112 @@ def render_report_data
8284
end
8385
end
8486
end
87+
88+
# Render report in csv/txt/pdf format asynchronously
89+
def render_report_data
90+
render_type = RENDER_TYPES[params[:render_type]]
91+
assert_privileges("render_report_#{render_type}")
92+
93+
if params[:task_id]
94+
# We are waiting for a task to finish.
95+
render_report_data_continue(params[:task_id])
96+
else
97+
# First time thru, kick off the report generate task.
98+
render_report_data_init(render_type)
99+
end
100+
end
85101
alias_method :render_report_txt, :render_report_data
86102
alias_method :render_report_csv, :render_report_data
87103
alias_method :render_report_pdf, :render_report_data
88104

89105
# Send rendered report data
90106
def send_report_data
91-
if @sb[:render_rr_id]
92-
disable_client_cache
93-
@result = MiqReportResult.find(@sb[:render_rr_id])
94-
@report = @result.report
95-
@data = @result.get_generated_result(@sb[:render_type])
96-
# We need the last_run_on time from the original result
97-
last_run_on = MiqReportResult.select(:last_run_on).find(session[:report_result_id]).last_run_on
98-
@result.destroy
107+
return unless @sb[:render_rr_id]
99108

100-
if @sb[:render_type] == :pdf
101-
@options = {
102-
:page_layout => 'landscape',
103-
:page_size => @report.page_size || 'a4',
104-
:run_date => format_timezone(last_run_on, @result.user_timezone, "gtl"),
105-
:title => @result.name
109+
disable_client_cache
110+
result = MiqReportResult.find(@sb[:render_rr_id])
111+
report = result.report
112+
113+
## THIS IS STRANGE
114+
# We need the last_run_on time from the original result
115+
last_run_on = MiqReportResult.select(:last_run_on).find(session[:report_result_id]).last_run_on
116+
117+
if @sb[:render_type] == :pdf
118+
@options = { # needed by the /layouts/print
119+
:page_layout => 'landscape',
120+
:page_size => report.page_size || 'a4',
121+
:run_date => format_timezone(last_run_on, result.user_timezone, "gtl"),
122+
:title => result.name
123+
}
124+
render(
125+
:template => '/layouts/print/report',
126+
:layout => '/layouts/print',
127+
:locals => {
128+
:report => report,
129+
:data => result.html_rows.join
106130
}
107-
render :template => '/layouts/print/report', :layout => '/layouts/print'
108-
else
109-
filename = filename_timestamp(@result.report.title, 'export_filename')
110-
send_data(@data,
111-
:filename => "#{filename}.#{@sb[:render_type]}",
112-
:type => "application/#{@sb[:render_type]}")
113-
end
131+
)
132+
else
133+
filename = filename_timestamp(result.report.title, 'export_filename')
134+
send_data(result.get_generated_result(@sb[:render_type]),
135+
:filename => "#{filename}.#{@sb[:render_type]}",
136+
:type => "application/#{@sb[:render_type]}")
114137
end
138+
139+
result.destroy
115140
end
116141

117142
# Download currently displayed view
118143
def download_data
119-
@view = session[:view].dup if session[:view] # Copy session view, if it exists
144+
view = session[:view].dup if session[:view] # Copy session view, if it exists
120145
options = session[:paged_view_search_options].merge(:page => nil, :per_page => nil) # Get all pages
121-
@view.table, _attrs = @view.paged_view_search(options) # Get the records
146+
view.table, _attrs = view.paged_view_search(options) # Get the records
122147

123-
@view.title = _(@view.title.pluralize)
124-
@view.headers.map! { |header| _(header) }
148+
view.title = _(view.title.pluralize)
149+
view.headers.map! { |header| _(header) }
125150

126-
@filename = filename_timestamp(@view.title)
127151
case params[:download_type]
128-
when "pdf"
129-
download_pdf(@view)
130-
when "text"
131-
download_txt(@view)
132-
when "csv"
133-
download_csv(@view)
152+
when 'pdf' then download_pdf(view)
153+
when 'text' then download_txt(view, filename_timestamp(view.title))
154+
when 'csv' then download_csv(view, filename_timestamp(view.title))
134155
end
135156
end
136157

137158
private
138159

139160
RENDER_TYPES = {'txt' => :txt, 'csv' => :csv, 'pdf' => :pdf}.freeze
140161

141-
def download_txt(view)
162+
def download_txt(view, filename)
142163
disable_client_cache
143-
send_data(view.to_text, :filename => "#{@filename}.txt")
164+
send_data(view.to_text, :filename => "#{filename}.txt")
144165
end
145166

146-
def download_csv(view)
167+
def download_csv(view, filename)
147168
disable_client_cache
148-
send_data(view.to_csv, :filename => "#{@filename}.csv")
169+
send_data(view.to_csv, :filename => "#{filename}.csv")
149170
end
150171

151172
# Send the current report in pdf format
152173
def download_pdf(view)
153-
render_pdf(view)
174+
render_pdf_internal(view)
175+
end
176+
177+
def report_from_task_id(task_id)
178+
MiqTask.find(task_id).task_results
179+
end
180+
181+
def report_from_report_results(report_result_id)
182+
rr = MiqReportResult.for_user(current_user).find(report_result_id)
183+
report = rr.report_results
184+
report.report_run_time = rr.last_run_on
185+
report
154186
end
155187

156188
def report_for_rendering
157189
if session[:rpt_task_id]
158-
miq_task = MiqTask.find(session[:rpt_task_id])
159-
miq_task.task_results
190+
report_from_task_id(session[:rpt_task_id])
160191
elsif session[:report_result_id]
161-
rr = MiqReportResult.for_user(current_user).find(session[:report_result_id])
162-
report = rr.report_results
163-
report.report_run_time = rr.last_run_on
164-
report
192+
report_from_report_results(session[:report_result_id])
165193
end
166194
end
167195

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
%table.table.table-striped.table-bordered.breakable
22
%thead
33
%tr
4-
- @report.headers.each_with_index do |header, i|
5-
- unless @report.column_is_hidden?(@report.col_order[i])
4+
- report.headers.each_with_index do |header, i|
5+
- unless report.column_is_hidden?(report.col_order[i])
66
%th
77
= h(_(header))
88
%tbody
9-
= @data.html_safe
9+
= data.html_safe

0 commit comments

Comments
 (0)