mirror of
https://github.com/openfoodfoundation/openfoodnetwork
synced 2026-03-11 03:40:20 +00:00
Improve reports performance
Add the scoping from the search filters for reports into the logic of building sets like `editable_line_items` before combining them into the query to reduce the number of `line_item` ids in the IN clause.
This commit is contained in:
@@ -2,24 +2,28 @@ require 'open_food_network/permissions'
|
||||
|
||||
module Permissions
|
||||
class Order
|
||||
def initialize(user)
|
||||
def initialize(user, search_params = nil)
|
||||
@user = user
|
||||
@permissions = OpenFoodNetwork::Permissions.new(@user)
|
||||
@search_params = search_params
|
||||
end
|
||||
|
||||
# Find orders that the user can see
|
||||
def visible_orders
|
||||
Spree::Order.
|
||||
orders = Spree::Order.
|
||||
with_line_items_variants_and_products_outer.
|
||||
where(visible_orders_where_values)
|
||||
orders = orders.complete.not_state(:canceled).search(search_params).result if search_orders?
|
||||
orders
|
||||
end
|
||||
|
||||
# Any orders that the user can edit
|
||||
def editable_orders
|
||||
Spree::Order.where(
|
||||
managed_orders_where_values.
|
||||
or(coordinated_orders_where_values)
|
||||
)
|
||||
orders = Spree::Order.
|
||||
where(managed_orders_where_values.
|
||||
or(coordinated_orders_where_values))
|
||||
orders = orders.complete.not_state(:canceled).search(search_params).result if search_orders?
|
||||
orders
|
||||
end
|
||||
|
||||
def visible_line_items
|
||||
@@ -35,6 +39,12 @@ module Permissions
|
||||
|
||||
private
|
||||
|
||||
attr_reader :search_params
|
||||
|
||||
def search_orders?
|
||||
search_params.present?
|
||||
end
|
||||
|
||||
def visible_orders_where_values
|
||||
# Grouping keeps the 2 where clauses from produced_orders_where_values inside parentheses
|
||||
# This way it makes the OR work between the 3 types of orders:
|
||||
|
||||
@@ -128,7 +128,7 @@ module OpenFoodNetwork
|
||||
|
||||
def order_permissions
|
||||
return @order_permissions unless @order_permissions.nil?
|
||||
@order_permissions = ::Permissions::Order.new(@user)
|
||||
@order_permissions = ::Permissions::Order.new(@user, @params[:q])
|
||||
end
|
||||
|
||||
def report_line_items
|
||||
|
||||
@@ -5,7 +5,7 @@ module OpenFoodNetwork
|
||||
@user = user
|
||||
@render_table = render_table
|
||||
|
||||
@permissions = ::Permissions::Order.new(user)
|
||||
@permissions = ::Permissions::Order.new(user, @params[:q])
|
||||
end
|
||||
|
||||
def header
|
||||
|
||||
@@ -83,7 +83,7 @@ module OpenFoodNetwork
|
||||
|
||||
def order_permissions
|
||||
return @order_permissions unless @order_permissions.nil?
|
||||
@order_permissions = ::Permissions::Order.new(@user)
|
||||
@order_permissions = ::Permissions::Order.new(@user, options[:q])
|
||||
end
|
||||
|
||||
def report_line_items
|
||||
|
||||
@@ -128,7 +128,7 @@ module OpenFoodNetwork
|
||||
|
||||
def order_permissions
|
||||
return @order_permissions unless @order_permissions.nil?
|
||||
@order_permissions = ::Permissions::Order.new(@user)
|
||||
@order_permissions = ::Permissions::Order.new(@user, @params[:q])
|
||||
end
|
||||
|
||||
def is_temperature_controlled?(line_item)
|
||||
|
||||
Reference in New Issue
Block a user