mirror of
https://github.com/openfoodfoundation/openfoodnetwork
synced 2026-01-26 20:56:48 +00:00
134 lines
5.1 KiB
Ruby
134 lines
5.1 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
module Admin
|
|
module EnterprisesHelper # rubocop:disable Metrics/ModuleLength
|
|
def add_check_if_single(count)
|
|
if count == 1
|
|
{ checked: true }
|
|
else
|
|
{}
|
|
end
|
|
end
|
|
|
|
def select_only_item(producers)
|
|
producers.size == 1 ? producers.first.id : nil
|
|
end
|
|
|
|
def managed_by_user?(enterprise)
|
|
enterprise.in?(spree_current_user.enterprises)
|
|
end
|
|
|
|
def enterprise_side_menu_items(enterprise) # rubocop:disable Metrics/CyclomaticComplexity
|
|
is_shop = enterprise.sells != "none"
|
|
show_properties = !!enterprise.is_primary_producer
|
|
show_shipping_methods = can?(:manage_shipping_methods, enterprise) && is_shop
|
|
show_payment_methods = can?(:manage_payment_methods, enterprise) && is_shop
|
|
show_enterprise_fees = can?(:manage_enterprise_fees,
|
|
enterprise) && (is_shop || enterprise.is_primary_producer)
|
|
show_connected_apps = can?(:manage_connected_apps, enterprise) &&
|
|
(connected_apps_enabled(enterprise).present? ||
|
|
dfc_platforms_available?)
|
|
show_inventory_settings = feature?(:inventory, *spree_current_user.enterprises) && is_shop
|
|
|
|
show_options = {
|
|
show_properties:,
|
|
show_shipping_methods:,
|
|
show_payment_methods:,
|
|
show_enterprise_fees:,
|
|
show_connected_apps:,
|
|
show_inventory_settings:,
|
|
}
|
|
|
|
build_enterprise_side_menu_items(is_shop:, show_options:)
|
|
end
|
|
|
|
def connected_apps_enabled(enterprise)
|
|
return [] unless feature?(:connected_apps, spree_current_user, enterprise)
|
|
|
|
connected_apps_enabled = Spree::Config.connected_apps_enabled&.split(',') || []
|
|
ConnectedApp::TYPES & connected_apps_enabled
|
|
end
|
|
|
|
def dfc_platforms_available?
|
|
ApiUser::PLATFORMS.keys.any? do |id|
|
|
feature?(id, spree_current_user)
|
|
end
|
|
end
|
|
|
|
def enterprise_attachment_removal_modal_id
|
|
attachment_removal_parameter # remove_logo|remove_promo_image|remove_white_label_logo
|
|
end
|
|
|
|
def enterprise_attachment_removal_panel
|
|
if attachment_removal_parameter == "remove_white_label_logo"
|
|
"white_label"
|
|
elsif ["remove_logo", "remove_promo_image"].include?(attachment_removal_parameter)
|
|
"images"
|
|
end
|
|
end
|
|
|
|
def enterprise_attachment_removal_panel_id
|
|
"#{enterprise_attachment_removal_panel}_panel"
|
|
end
|
|
|
|
def enterprise_sells_options
|
|
scope = "admin.enterprises.admin_index.sells_options"
|
|
Enterprise::SELLS.map { |s| [I18n.t(s, scope:), s] }
|
|
end
|
|
|
|
# Group tag rules per rule.preferred_customer_tags
|
|
def tag_groups(tag_rules)
|
|
tag_rules.each_with_object([]) do |tag_rule, tag_groups|
|
|
tag_group = find_match(tag_groups, tag_rule.preferred_customer_tags.split(","))
|
|
|
|
if tag_group[:rules].blank?
|
|
tag_groups << tag_group
|
|
tag_group[:position] = tag_groups.count
|
|
end
|
|
|
|
tag_group[:rules] << tag_rule
|
|
end
|
|
end
|
|
|
|
private
|
|
|
|
def find_match(tag_groups, tags)
|
|
tag_groups.each do |tag_group|
|
|
return tag_group if tag_group[:tags].length == tags.length &&
|
|
(tag_group[:tags] & tags) == tag_group[:tags]
|
|
end
|
|
{ tags:, rules: [] }
|
|
end
|
|
|
|
def build_enterprise_side_menu_items(is_shop:, show_options: ) # rubocop:disable Metrics/MethodLength
|
|
[
|
|
{ name: 'primary_details', icon_class: "icon-home", show: true, selected: 'selected' },
|
|
{ name: 'address', icon_class: "icon-map-marker", show: true },
|
|
{ name: 'contact', icon_class: "icon-phone", show: true },
|
|
{ name: 'social', icon_class: "icon-twitter", show: true },
|
|
{ name: 'about', icon_class: "icon-pencil", show: true, form_name: "about_us" },
|
|
{ name: 'business_details', icon_class: "icon-briefcase", show: true },
|
|
{ name: 'images', icon_class: "icon-picture", show: true },
|
|
{ name: 'properties', icon_class: "icon-tags", show: show_options[:show_properties] },
|
|
{ name: 'shipping_methods', icon_class: "icon-truck",
|
|
show: show_options[:show_shipping_methods] },
|
|
{ name: 'payment_methods', icon_class: "icon-money",
|
|
show: show_options[:show_payment_methods] },
|
|
{ name: 'enterprise_fees', icon_class: "icon-tasks",
|
|
show: show_options[:show_enterprise_fees] },
|
|
{ name: 'vouchers', icon_class: "icon-ticket", show: is_shop },
|
|
{ name: 'enterprise_permissions', icon_class: "icon-plug", show: true,
|
|
href: admin_enterprise_relationships_path },
|
|
{ name: 'inventory_settings', icon_class: "icon-list-ol",
|
|
show: show_options[:show_inventory_settings] },
|
|
{ name: 'tag_rules', icon_class: "icon-random", show: is_shop },
|
|
{ name: 'shop_preferences', icon_class: "icon-shopping-cart", show: is_shop },
|
|
{ name: 'white_label', icon_class: "icon-leaf", show: true },
|
|
{ name: 'users', icon_class: "icon-user", show: true },
|
|
{ name: 'connected_apps', icon_class: "icon-puzzle-piece",
|
|
show: show_options[:show_connected_apps] },
|
|
]
|
|
end
|
|
end
|
|
end
|