diff --git a/lib/open_food_network/reports/line_items.rb b/lib/open_food_network/reports/line_items.rb index 86350a95e3..a7b8951fe6 100644 --- a/lib/open_food_network/reports/line_items.rb +++ b/lib/open_food_network/reports/line_items.rb @@ -12,11 +12,11 @@ module OpenFoodNetwork line_items = permissions.visible_line_items.merge(Spree::LineItem.where(order_id: orders)) line_items = line_items.supplied_by_any(params[:supplier_id_in]) if params[:supplier_id_in].present? - # If empty array is passed in, the where clause will return all line_items, which is bad - line_items_with_hidden_details = - permissions.editable_line_items.empty? ? line_items : line_items.where('"spree_line_items"."id" NOT IN (?)', permissions.editable_line_items) + hidden_line_items = line_items_with_hidden_details(permissions, line_items) - line_items.select{ |li| line_items_with_hidden_details.include? li }.each do |line_item| + line_items.select{ |li| + hidden_line_items.include? li + }.each do |line_item| # TODO We should really be hiding customer code here too, but until we # have an actual association between order and customer, it's a bit tricky line_item.order.bill_address.andand.assign_attributes(firstname: I18n.t('admin.reports.hidden'), lastname: "", phone: "", address1: "", address2: "", city: "", zipcode: "", state: nil) @@ -25,6 +25,16 @@ module OpenFoodNetwork end line_items end + + def self.line_items_with_hidden_details(permissions, line_items) + editable_line_items = permissions.editable_line_items.pluck(:id) + + if editable_line_items.empty? + line_items + else + line_items.where('"spree_line_items"."id" NOT IN (?)', editable_line_items) + end + end end end end