mirror of
https://github.com/openfoodfoundation/openfoodnetwork
synced 2026-01-25 20:46:48 +00:00
63 lines
1.4 KiB
Ruby
63 lines
1.4 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
module Reporting
|
|
class ReportTemplate
|
|
delegate :as_json, :as_arrays, :table_headers, :table_rows,
|
|
:to_csv, :to_xlsx, :to_ods, :to_json, to: :renderer
|
|
|
|
attr_reader :options
|
|
|
|
SUBTYPES = []
|
|
|
|
def self.report_subtypes
|
|
self::SUBTYPES
|
|
end
|
|
|
|
def initialize(current_user, ransack_params, options = {})
|
|
@current_user = current_user
|
|
@ransack_params = ransack_params.with_indifferent_access
|
|
@options = ( options || {} ).with_indifferent_access
|
|
end
|
|
|
|
def report_data
|
|
@report_data ||= report_query.raw_result
|
|
end
|
|
|
|
private
|
|
|
|
attr_reader :current_user, :ransack_params
|
|
|
|
def renderer
|
|
@renderer ||= ReportRenderer.new(self)
|
|
end
|
|
|
|
def ransacked_orders_relation
|
|
visible_orders_relation.ransack(ransack_params).result
|
|
end
|
|
|
|
def ransacked_line_items_relation
|
|
visible_line_items_relation.ransack(ransack_params).result
|
|
end
|
|
|
|
def visible_orders_relation
|
|
::Permissions::Order.new(current_user).
|
|
visible_orders.complete.not_state(:canceled).
|
|
select(:id).distinct
|
|
end
|
|
|
|
def visible_line_items_relation
|
|
::Permissions::Order.new(current_user).
|
|
visible_line_items.
|
|
select(:id).distinct
|
|
end
|
|
|
|
def managed_orders_relation
|
|
::Enterprise.managed_by(current_user).select(:id).distinct
|
|
end
|
|
|
|
def i18n_scope
|
|
"admin.reports"
|
|
end
|
|
end
|
|
end
|