mirror of
https://github.com/openfoodfoundation/openfoodnetwork
synced 2026-02-27 01:43:22 +00:00
Convert Report::LineItems to class and memoize orders so it's only executed once (this improves the report in 3secs for the case I am testing)
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user