mirror of
https://github.com/openfoodfoundation/openfoodnetwork
synced 2026-01-24 20:36:49 +00:00
104 lines
3.2 KiB
Ruby
104 lines
3.2 KiB
Ruby
module OrderCyclesHelper
|
|
def current_order_cycle
|
|
@current_order_cycle ||= current_order(false).andand.order_cycle
|
|
end
|
|
|
|
def permitted_enterprises_for(order_cycle)
|
|
OpenFoodNetwork::OrderCyclePermissions.new(spree_current_user, order_cycle).visible_enterprises
|
|
end
|
|
|
|
def permitted_producer_enterprises_for(order_cycle)
|
|
permitted_enterprises_for(order_cycle).is_primary_producer.by_name
|
|
end
|
|
|
|
def permitted_producer_enterprise_options_for(order_cycle)
|
|
validated_enterprise_options permitted_producer_enterprises_for(order_cycle)
|
|
end
|
|
|
|
def permitted_coordinating_enterprises_for(_order_cycle)
|
|
Enterprise.managed_by(spree_current_user).is_distributor.by_name
|
|
end
|
|
|
|
def permitted_coordinating_enterprise_options_for(order_cycle)
|
|
validated_enterprise_options permitted_coordinating_enterprises_for(order_cycle)
|
|
end
|
|
|
|
def permitted_hub_enterprises_for(order_cycle)
|
|
permitted_enterprises_for(order_cycle).is_hub.by_name
|
|
end
|
|
|
|
def permitted_hub_enterprise_options_for(order_cycle)
|
|
validated_enterprise_options permitted_hub_enterprises_for(order_cycle), shipping_and_payment_methods: true
|
|
end
|
|
|
|
def order_cycle_status_class(order_cycle)
|
|
if order_cycle.undated?
|
|
'undated'
|
|
elsif order_cycle.upcoming?
|
|
'upcoming'
|
|
elsif order_cycle.open?
|
|
'open'
|
|
elsif order_cycle.closed?
|
|
'closed'
|
|
end
|
|
end
|
|
|
|
def order_cycle_options
|
|
@order_cycles.
|
|
with_distributor(current_distributor).
|
|
map { |oc| [order_cycle_close_to_s(oc.orders_close_at), oc.id] }
|
|
end
|
|
|
|
def order_cycle_close_to_s(orders_close_at)
|
|
"%s (%s)" % [orders_close_at.strftime("#{orders_close_at.day.ordinalize} %b"),
|
|
distance_of_time_in_words_to_now(orders_close_at)]
|
|
end
|
|
|
|
def active_order_cycle_for_distributor?(_distributor)
|
|
OrderCycle.active.with_distributor(@distributor).present?
|
|
end
|
|
|
|
def simple_index
|
|
@simple_index ||= !OpenFoodNetwork::Permissions.new(spree_current_user).can_manage_complex_order_cycles?
|
|
end
|
|
|
|
def order_cycles_simple_form
|
|
@order_cycles_simple_form ||= @order_cycle.coordinator.sells == 'own'
|
|
end
|
|
|
|
def pickup_time(order_cycle = current_order_cycle)
|
|
order_cycle.exchanges.to_enterprises(current_distributor).outgoing.first.pickup_time
|
|
end
|
|
|
|
def can_delete?(order_cycle)
|
|
Spree::Order.where(order_cycle_id: order_cycle).none?
|
|
end
|
|
|
|
def viewing_as_coordinator_of?(order_cycle)
|
|
Enterprise.managed_by(spree_current_user).include? order_cycle.coordinator
|
|
end
|
|
|
|
private
|
|
|
|
def validated_enterprise_options(enterprises, options = {})
|
|
enterprises.map do |e|
|
|
disabled_message = nil
|
|
if options[:shipping_and_payment_methods] && (e.shipping_methods.empty? || e.payment_methods.available.empty?)
|
|
if e.shipping_methods.empty? && e.payment_methods.available.empty?
|
|
disabled_message = I18n.t(:no_shipping_or_payment)
|
|
elsif e.shipping_methods.empty?
|
|
disabled_message = I18n.t(:no_shipping)
|
|
elsif e.payment_methods.available.empty?
|
|
disabled_message = I18n.t(:no_payment)
|
|
end
|
|
end
|
|
|
|
if disabled_message
|
|
["#{e.name} (#{disabled_message})", e.id, { disabled: true }]
|
|
else
|
|
[e.name, e.id]
|
|
end
|
|
end
|
|
end
|
|
end
|