mirror of
https://github.com/openfoodfoundation/openfoodnetwork
synced 2026-01-24 20:36:49 +00:00
93 lines
2.4 KiB
Ruby
93 lines
2.4 KiB
Ruby
module OpenFoodNetwork
|
|
class CustomersReport
|
|
attr_reader :params
|
|
def initialize(user, params = {}, compile_table = false)
|
|
@params = params
|
|
@user = user
|
|
@compile_table = compile_table
|
|
end
|
|
|
|
def header
|
|
if is_mailing_list?
|
|
[I18n.t(:report_header_email),
|
|
I18n.t(:report_header_first_name),
|
|
I18n.t(:report_header_last_name),
|
|
I18n.t(:report_header_suburb)]
|
|
else
|
|
[I18n.t(:report_header_first_name),
|
|
I18n.t(:report_header_last_name),
|
|
I18n.t(:report_header_billing_address),
|
|
I18n.t(:report_header_email),
|
|
I18n.t(:report_header_phone),
|
|
I18n.t(:report_header_hub),
|
|
I18n.t(:report_header_hub_address),
|
|
I18n.t(:report_header_shipping_method)]
|
|
end
|
|
end
|
|
|
|
def table
|
|
return [] unless @compile_table
|
|
|
|
orders.map do |order|
|
|
if is_mailing_list?
|
|
[order.email,
|
|
order.billing_address.firstname,
|
|
order.billing_address.lastname,
|
|
order.billing_address.city]
|
|
else
|
|
ba = order.billing_address
|
|
da = order.distributor.andand.address
|
|
[ba.firstname,
|
|
ba.lastname,
|
|
[ba.address1, ba.address2, ba.city].join(" "),
|
|
order.email,
|
|
ba.phone,
|
|
order.distributor.andand.name,
|
|
[da.andand.address1, da.andand.address2, da.andand.city].join(" "),
|
|
order.shipping_method.andand.name]
|
|
end
|
|
end
|
|
end
|
|
|
|
def orders
|
|
filter Spree::Order.managed_by(@user).distributed_by_user(@user).complete.not_state(:canceled)
|
|
end
|
|
|
|
def filter(orders)
|
|
filter_to_supplier filter_to_distributor filter_to_order_cycle orders
|
|
end
|
|
|
|
def filter_to_supplier(orders)
|
|
if params[:supplier_id].to_i > 0
|
|
orders.select do |order|
|
|
order.line_items.includes(:product).where("spree_products.supplier_id = ?", params[:supplier_id].to_i).count > 0
|
|
end
|
|
else
|
|
orders
|
|
end
|
|
end
|
|
|
|
def filter_to_distributor(orders)
|
|
if params[:distributor_id].to_i > 0
|
|
orders.where(distributor_id: params[:distributor_id])
|
|
else
|
|
orders
|
|
end
|
|
end
|
|
|
|
def filter_to_order_cycle(orders)
|
|
if params[:order_cycle_id].to_i > 0
|
|
orders.where(order_cycle_id: params[:order_cycle_id])
|
|
else
|
|
orders
|
|
end
|
|
end
|
|
|
|
private
|
|
|
|
def is_mailing_list?
|
|
params[:report_type] == "mailing_list"
|
|
end
|
|
end
|
|
end
|