Revision cb30bb3b
Added by Ondřej Ezr about 5 years ago
app/controllers/api/v2/report_templates_controller.rb | ||
---|---|---|
param :id, :identifier, :required => true
|
||
param :input_values, Hash, :desc => N_('Hash of input values where key is the name of input, value is the value for this input')
|
||
param :gzip, :bool, desc: N_('Compress the report using gzip')
|
||
param :mail_to, String, desc: N_("If set, scheduled report will be delivered via e-mail. Use '%s' to separate multiple email addresses.") % ReportComposer::MailToValidator::MAIL_DELIMITER
|
||
returns :code => 200, :desc => "a successful response" do
|
||
property :job_id, String, :desc => "An ID of job, which generates report. To be used with report_data API endpoint for report data retrieval."
|
||
property :data_url, String, :desc => "An url to get resulting report from."
|
||
property :data_url, String, :desc => "An url to get resulting report from. This is not available when report is delivered via e-mail."
|
||
end
|
||
example <<-EXAMPLE
|
||
POST /api/report_templates/:id/schedule_report/
|
||
... | ... | |
}
|
||
EXAMPLE
|
||
description <<-DOC
|
||
The reports are generated asynchronously. Action returns an url to get resulting report from (see <b>report_data</b>).
|
||
The reports are generated asynchronously.
|
||
If mail_to is not given, action returns an url to get resulting report from (see <b>report_data</b>).
|
||
DOC
|
||
|
||
def schedule_report
|
||
@composer = ReportComposer.from_api_params(params)
|
||
if @composer.valid?
|
||
job = TemplateRenderJob.perform_later(@composer.to_params, user_id: User.current.id)
|
||
render json: { job_id: job.provider_job_id, data_url: report_data_api_report_template_path(@report_template, job_id: job.provider_job_id) }
|
||
response = { job_id: job.provider_job_id }
|
||
response[:data_url] = report_data_api_report_template_path(@report_template, job_id: job.provider_job_id) unless @composer.send_mail?
|
||
render json: response
|
||
else
|
||
@report_template = @composer
|
||
process_resource_error
|
||
... | ... | |
elsif @plan.failure?
|
||
render json: { errors: @plan.errors }, status: :unprocessable_entity
|
||
else
|
||
data = @composer.stored_result(params[:job_id])
|
||
data = StoredValue.read(params[:job_id])
|
||
return not_found(_('Report data are not available, it has probably expired.')) unless data
|
||
send_data data, type: @composer.mime_type, filename: @composer.report_filename
|
||
end
|
Also available in: Unified diff
Fixes #25478 - reports by mail (#6567)