mirror of
https://github.com/openfoodfoundation/openfoodnetwork
synced 2026-01-24 20:36:49 +00:00
140 lines
4.2 KiB
Ruby
140 lines
4.2 KiB
Ruby
require 'open_food_network/enterprise_injection_data'
|
|
|
|
module InjectionHelper
|
|
include SerializerHelper
|
|
|
|
def inject_enterprises(enterprises = Enterprise.activated.includes(address: :state).all)
|
|
inject_json_ams(
|
|
"enterprises",
|
|
enterprises,
|
|
Api::EnterpriseSerializer,
|
|
enterprise_injection_data
|
|
)
|
|
end
|
|
|
|
def inject_groups
|
|
select_only = required_attributes EnterpriseGroup, Api::GroupListSerializer
|
|
|
|
inject_json_ams(
|
|
"groups",
|
|
EnterpriseGroup.on_front_page.by_position.select(select_only).includes(address: :state).all,
|
|
Api::GroupListSerializer
|
|
)
|
|
end
|
|
|
|
def inject_enterprise_shopfront(enterprise)
|
|
inject_json_ams(
|
|
"shopfront",
|
|
enterprise,
|
|
Api::EnterpriseShopfrontSerializer
|
|
)
|
|
end
|
|
|
|
def inject_enterprise_shopfront_list
|
|
select_only = required_attributes Enterprise, Api::EnterpriseShopfrontListSerializer
|
|
|
|
inject_json_ams(
|
|
"enterprises",
|
|
Enterprise.activated.visible.select(select_only).includes(address: :state).all,
|
|
Api::EnterpriseShopfrontListSerializer
|
|
)
|
|
end
|
|
|
|
def inject_enterprise_and_relatives
|
|
inject_json_ams "enterprises", current_distributor.relatives_including_self.activated.includes(address: :state).all, Api::EnterpriseSerializer, enterprise_injection_data
|
|
end
|
|
|
|
def inject_group_enterprises
|
|
inject_json_ams(
|
|
"enterprises",
|
|
@group.enterprises.activated.all,
|
|
Api::EnterpriseSerializer,
|
|
enterprise_injection_data
|
|
)
|
|
end
|
|
|
|
def inject_current_hub
|
|
inject_json_ams "currentHub", current_distributor, Api::EnterpriseSerializer, enterprise_injection_data
|
|
end
|
|
|
|
def inject_current_order
|
|
inject_json_ams "currentOrder", current_order, Api::CurrentOrderSerializer, current_distributor: current_distributor, current_order_cycle: current_order_cycle
|
|
end
|
|
|
|
def inject_available_shipping_methods
|
|
inject_json_ams "shippingMethods", available_shipping_methods,
|
|
Api::ShippingMethodSerializer, current_order: current_order
|
|
end
|
|
|
|
def inject_available_payment_methods
|
|
inject_json_ams "paymentMethods", available_payment_methods,
|
|
Api::PaymentMethodSerializer, current_order: current_order
|
|
end
|
|
|
|
def inject_taxons
|
|
inject_json_ams "taxons", Spree::Taxon.all, Api::TaxonSerializer
|
|
end
|
|
|
|
def inject_properties
|
|
inject_json_ams "properties", Spree::Property.all, Api::PropertySerializer
|
|
end
|
|
|
|
def inject_currency_config
|
|
inject_json_ams "currencyConfig", {}, Api::CurrencyConfigSerializer
|
|
end
|
|
|
|
def inject_spree_api_key
|
|
render partial: "json/injection_ams", locals: { name: 'spreeApiKey', json: "'#{@spree_api_key}'" }
|
|
end
|
|
|
|
def inject_available_countries
|
|
inject_json_ams "availableCountries", available_countries, Api::CountrySerializer
|
|
end
|
|
|
|
def inject_enterprise_attributes
|
|
render partial: "json/injection_ams", locals: { name: 'enterpriseAttributes', json: @enterprise_attributes.to_json.to_s }
|
|
end
|
|
|
|
def inject_orders
|
|
inject_json_ams "orders", @orders.all, Api::OrderSerializer
|
|
end
|
|
|
|
def inject_shops
|
|
customers = spree_current_user.customers
|
|
shops = Enterprise.where(id: @orders.pluck(:distributor_id).uniq | customers.pluck(:enterprise_id))
|
|
inject_json_ams "shops", shops.all, Api::ShopForOrdersSerializer
|
|
end
|
|
|
|
def inject_saved_credit_cards
|
|
data = spree_current_user ? spree_current_user.credit_cards.with_payment_profile.all : []
|
|
|
|
inject_json_ams "savedCreditCards", data, Api::CreditCardSerializer
|
|
end
|
|
|
|
def inject_current_user
|
|
inject_json_ams "user", spree_current_user, Api::UserSerializer
|
|
end
|
|
|
|
def inject_rails_flash
|
|
inject_json_ams "railsFlash", OpenStruct.new(flash.to_hash), Api::RailsFlashSerializer
|
|
end
|
|
|
|
def inject_json_ams(name, data, serializer, opts = {})
|
|
if data.is_a?(Array)
|
|
opts = { each_serializer: serializer }.merge(opts)
|
|
serializer = ActiveModel::ArraySerializer
|
|
end
|
|
|
|
serializer_instance = serializer.new(data, opts)
|
|
json = serializer_instance.to_json
|
|
render partial: "json/injection_ams", locals: { name: name, json: json }
|
|
end
|
|
|
|
private
|
|
|
|
def enterprise_injection_data
|
|
@enterprise_injection_data ||= OpenFoodNetwork::EnterpriseInjectionData.new
|
|
{ data: @enterprise_injection_data }
|
|
end
|
|
end
|