diff --git a/lib/open_food_network/bulk_coop_report.rb b/lib/open_food_network/bulk_coop_report.rb index fcaa3afbb8..e4a89dbbe5 100644 --- a/lib/open_food_network/bulk_coop_report.rb +++ b/lib/open_food_network/bulk_coop_report.rb @@ -46,12 +46,12 @@ module OpenFoodNetwork end def search - Reports::LineItems.search_orders(order_permissions, params) + report_line_items.orders end def table_items return [] unless @render_table - Reports::LineItems.list(order_permissions, report_options) + report_line_items.list(line_item_includes) end def rules @@ -121,10 +121,6 @@ module OpenFoodNetwork private - def report_options - @params.merge(line_item_includes: line_item_includes) - end - def line_item_includes [{ order: [:bill_address], variant: [{ option_values: :option_type }, { product: :supplier }] }] @@ -134,5 +130,9 @@ module OpenFoodNetwork return @order_permissions unless @order_permissions.nil? @order_permissions = ::Permissions::Order.new(@user) end + + def report_line_items + @report_line_items ||= Reports::LineItems.new(order_permissions, @params) + end end end diff --git a/lib/open_food_network/orders_and_fulfillments_report.rb b/lib/open_food_network/orders_and_fulfillments_report.rb index dbecd1fc29..45d36b2a80 100644 --- a/lib/open_food_network/orders_and_fulfillments_report.rb +++ b/lib/open_food_network/orders_and_fulfillments_report.rb @@ -21,14 +21,12 @@ module OpenFoodNetwork end def search - Reports::LineItems.search_orders(order_permissions, options) + report_line_items.orders end def table_items return [] unless @render_table - - list_options = options.merge(line_item_includes: report.line_item_includes) - Reports::LineItems.list(order_permissions, list_options) + report_line_items.list(report.line_item_includes) end private @@ -87,5 +85,9 @@ module OpenFoodNetwork return @order_permissions unless @order_permissions.nil? @order_permissions = ::Permissions::Order.new(@user) end + + def report_line_items + @report_line_items ||= Reports::LineItems.new(order_permissions, options) + end end end diff --git a/lib/open_food_network/packing_report.rb b/lib/open_food_network/packing_report.rb index 4d07c91b40..997059a666 100644 --- a/lib/open_food_network/packing_report.rb +++ b/lib/open_food_network/packing_report.rb @@ -38,12 +38,12 @@ module OpenFoodNetwork end def search - Reports::LineItems.search_orders(order_permissions, params) + report_line_items.orders end def table_items return [] unless @render_table - Reports::LineItems.list(order_permissions, report_options) + report_line_items.list(line_item_includes) end def rules @@ -120,10 +120,6 @@ module OpenFoodNetwork private - def report_options - @params.merge(line_item_includes: line_item_includes) - end - def line_item_includes [{ order: [:bill_address, :distributor], variant: [{ option_values: :option_type }, { product: :supplier }] }] @@ -150,5 +146,9 @@ module OpenFoodNetwork customer = Customer.where(email: email).first customer.nil? ? "" : customer.code end + + def report_line_items + @report_line_items ||= Reports::LineItems.new(order_permissions, @params) + end end end diff --git a/lib/open_food_network/reports/line_items.rb b/lib/open_food_network/reports/line_items.rb index 30e86f21e2..6a0c320dbf 100644 --- a/lib/open_food_network/reports/line_items.rb +++ b/lib/open_food_network/reports/line_items.rb @@ -1,27 +1,30 @@ module OpenFoodNetwork module Reports # shared code to search and list line items - module LineItems - def self.search_orders(order_permissions, params) - order_permissions.visible_orders.complete.not_state(:canceled).search(params[:q]) + class LineItems + def initialize(order_permissions, params) + @order_permissions = order_permissions + @params = params end - def self.list(order_permissions, params) - orders = search_orders(order_permissions, params).result + def orders + @orders ||= search_orders + end - line_items = order_permissions. + def list(line_item_includes = nil) + line_items = @order_permissions. visible_line_items. - merge(Spree::LineItem.where(order_id: orders)) + merge(Spree::LineItem.where(order_id: orders.result)) - if params[:supplier_id_in].present? - line_items = line_items.supplied_by_any(params[:supplier_id_in]) + if @params[:supplier_id_in].present? + line_items = line_items.supplied_by_any(@params[:supplier_id_in]) end - if params[:line_item_includes].present? - line_items = line_items.includes(*params[:line_item_includes]) + if line_item_includes.present? + line_items = line_items.includes(*line_item_includes) end - hidden_line_items = line_items_with_hidden_details(order_permissions, line_items) + hidden_line_items = line_items_with_hidden_details(line_items) line_items.select{ |li| hidden_line_items.include? li @@ -38,11 +41,18 @@ module OpenFoodNetwork city: "", zipcode: "", state: nil) line_item.order.assign_attributes(email: I18n.t('admin.reports.hidden')) end + line_items end - def self.line_items_with_hidden_details(order_permissions, line_items) - editable_line_items = order_permissions.editable_line_items.pluck(:id) + private + + def search_orders + @order_permissions.visible_orders.complete.not_state(:canceled).search(@params[:q]) + end + + def line_items_with_hidden_details(line_items) + editable_line_items = @order_permissions.editable_line_items.pluck(:id) if editable_line_items.empty? line_items