Files
openfoodnetwork/lib/reporting/report_query_template.rb
2025-10-31 15:20:44 +11:00

56 lines
1.3 KiB
Ruby

# frozen_string_literal: true
# This is the new report template that use QueryBuilder to directly get the data from the DB
module Reporting
class ReportQueryTemplate < ReportTemplate
def report_query
raise NotImplementedError
end
def report_data
@report_data ||= report_query.raw_result
end
# ReportQueryTemplate work differently than standard reports
# Here the query_result is already the expected result, so we just create
# a fake columns method to copy the sql result into the row result
def columns
report_data.columns.to_h{ |field| [field.to_sym, proc { |data| data[field] }] }
end
def search
visible_line_items_relation.ransack(ransack_params)
end
def query_result
report_data.to_a
end
private
def ransacked_line_items_relation
search.result
end
def visible_orders_relation
::Permissions::Order.new(user).
visible_orders.complete.not_state(:canceled).
select(:id).distinct
end
def visible_line_items_relation
::Permissions::Order.new(user).
visible_line_items.
select(:id).distinct
end
def managed_orders_relation
::Enterprise.managed_by(user).select(:id).distinct
end
def i18n_scope
"admin.reports"
end
end
end