mirror of
https://github.com/openfoodfoundation/openfoodnetwork
synced 2026-01-25 20:46:48 +00:00
44 lines
1.0 KiB
Ruby
44 lines
1.0 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
class SearchOrders
|
|
attr_reader :orders
|
|
|
|
def initialize(params, current_user)
|
|
@params = params
|
|
@current_user = current_user
|
|
|
|
@orders = fetch_orders
|
|
end
|
|
|
|
private
|
|
|
|
attr_reader :params, :current_user
|
|
|
|
def fetch_orders
|
|
search = search_query.
|
|
includes(:payments, :subscription, :shipments, :bill_address, :distributor, :order_cycle).
|
|
ransack(params[:q]).
|
|
result(distinct: true)
|
|
|
|
if params.dig(:q, :s)&.starts_with?("bill_address_")
|
|
search = search.select('spree_addresses.*, spree_orders.*')
|
|
end
|
|
|
|
search
|
|
end
|
|
|
|
def search_query
|
|
base_query = ::Permissions::Order.new(current_user).editable_orders.not_empty
|
|
.or(::Permissions::Order.new(current_user).editable_orders.finalized)
|
|
|
|
return base_query if params[:shipping_method_id].blank?
|
|
|
|
base_query
|
|
.joins(shipments: :shipping_rates)
|
|
.where(spree_shipping_rates: {
|
|
selected: true,
|
|
shipping_method_id: params[:shipping_method_id]
|
|
})
|
|
end
|
|
end
|