Files
openfoodnetwork/lib/reporting/frontend_data.rb
2023-01-21 18:39:33 +01:00

64 lines
1.7 KiB
Ruby

# frozen_string_literal: true
module Reporting
class FrontendData
def initialize(current_user)
@current_user = current_user
end
# Load managed distributor enterprises of current user
def distributors
@distributors ||= Enterprise.is_distributor.managed_by(current_user)
end
def suppliers
@suppliers ||= my_suppliers | suppliers_of_products_distributed_by(distributors)
end
# Load managed producer enterprises of current user
def my_suppliers
Enterprise.is_primary_producer.managed_by(current_user)
end
def suppliers_of_products_distributed_by(distributors)
supplier_ids = Spree::Product.in_distributors(distributors.select('enterprises.id')).
select('spree_products.supplier_id')
Enterprise.where(id: supplier_ids)
end
def orders_distributors
@orders_distributors ||= permissions.visible_enterprises_for_order_reports
.is_distributor.select("enterprises.id, enterprises.name")
end
def orders_suppliers
@orders_suppliers ||= permissions.visible_enterprises_for_order_reports
.is_primary_producer.select("enterprises.id, enterprises.name")
end
def order_cycles
@order_cycles ||= OrderCycle.
active_or_complete.
visible_by(current_user).
order('order_cycles.orders_close_at DESC')
end
def order_customers
Customer.where(id: visible_order_customer_ids).select("customers.id, customers.email")
end
private
attr_reader :current_user
def permissions
@permissions ||= OpenFoodNetwork::Permissions.new(current_user)
end
def visible_order_customer_ids
Permissions::Order.new(current_user).visible_orders.pluck(:customer_id)
end
end
end