Files
openfoodnetwork/app/controllers/concerns/reports_actions.rb
2025-10-01 13:59:43 +10:00

105 lines
2.3 KiB
Ruby

# frozen_string_literal: true
module ReportsActions
extend ActiveSupport::Concern
def reports
Reporting::Reports::List.all
end
private
def authorize_report
authorize! report_type.to_sym, :report
end
def report_class
return if report_type.blank?
report_loader.report_class
end
def report_loader
@report_loader ||= ::Reporting::ReportLoader.new(report_type, report_subtype)
end
def report_type
params[:report_type]
end
def report_subtypes
reports[report_type.to_sym] || []
end
def report_subtypes_codes
report_subtypes.map(&:second).map(&:to_s)
end
def report_subtype
params[:report_subtype] || report_subtypes_codes.first
end
def report_title
if report_subtype
report_subtype_title
else
I18n.t(:name, scope: [:admin, :reports, report_type])
end
end
def report_subtype_title
report_subtypes.select { |_name, key| key.to_sym == report_subtype.to_sym }.first[0]
end
def ransack_params
raw_params[:q]
end
def report_format
params[:report_format].presence || "html"
end
def report_filename
"#{report_type || action_name}_#{file_timestamp}.#{report_format}"
end
def file_timestamp
Time.zone.now.strftime("%Y%m%d")
end
def i18n_scope
'admin.reports'
end
def rendering_options
@rendering_options ||= ReportRenderingOptions.where(
user: spree_current_user,
report_type:,
report_subtype:
).first_or_create do |report_rendering_options|
report_rendering_options.options = {
fields_to_show: if request.get?
@report.columns.keys -
@report.fields_to_hide
else
params[:fields_to_show]
end,
display_metadata_rows: false,
display_summary_row: request.get?,
display_header_row: false
}
end
end
def update_rendering_options
rendering_options.update(
options: {
fields_to_show: params[:fields_to_show],
display_metadata_rows: params[:display_metadata_rows].present?,
display_summary_row: params[:display_summary_row].present?,
display_header_row: params[:display_header_row].present?
}
)
end
end