mirror of
https://github.com/openfoodfoundation/openfoodnetwork
synced 2026-01-27 21:06:49 +00:00
Add a new column email_address to enterprises. Use this new field for public display of contact details. The old field enterprise.email is still used internally. It is still displayed on orders and emails sent to customers. A new enterprise has the owner's email address by default now. Fix GH #757
146 lines
3.6 KiB
Ruby
146 lines
3.6 KiB
Ruby
class Api::EnterpriseSerializer < ActiveModel::Serializer
|
|
# We reference this here because otherwise the serializer complains about its absence
|
|
Api::IdSerializer
|
|
|
|
def serializable_hash
|
|
cached_serializer_hash.merge uncached_serializer_hash
|
|
end
|
|
|
|
private
|
|
|
|
def cached_serializer_hash
|
|
Api::CachedEnterpriseSerializer.new(object, @options).serializable_hash || {}
|
|
end
|
|
|
|
def uncached_serializer_hash
|
|
Api::UncachedEnterpriseSerializer.new(object, @options).serializable_hash || {}
|
|
end
|
|
end
|
|
|
|
class Api::UncachedEnterpriseSerializer < ActiveModel::Serializer
|
|
attributes :orders_close_at, :active
|
|
|
|
def orders_close_at
|
|
options[:data].earliest_closing_times[object.id]
|
|
end
|
|
|
|
def active
|
|
options[:data].active_distributors.andand.include? object
|
|
end
|
|
end
|
|
|
|
class Api::CachedEnterpriseSerializer < ActiveModel::Serializer
|
|
cached
|
|
#delegate :cache_key, to: :object
|
|
|
|
def cache_key
|
|
object.andand.cache_key
|
|
end
|
|
|
|
|
|
attributes :name, :id, :description, :latitude, :longitude,
|
|
:long_description, :website, :instagram, :linkedin, :twitter,
|
|
:facebook, :is_primary_producer, :is_distributor, :phone, :visible,
|
|
:email_address, :hash, :logo, :promo_image, :path, :pickup, :delivery,
|
|
:icon, :icon_font, :producer_icon_font, :category, :producers, :hubs
|
|
|
|
attributes :taxons, :supplied_taxons
|
|
|
|
has_one :address, serializer: Api::AddressSerializer
|
|
|
|
|
|
def taxons
|
|
ids_to_objs options[:data].distributed_taxons[object.id]
|
|
end
|
|
|
|
def supplied_taxons
|
|
ids_to_objs options[:data].supplied_taxons[object.id]
|
|
end
|
|
|
|
def pickup
|
|
services = options[:data].shipping_method_services[object.id]
|
|
services ? services[:pickup] : false
|
|
end
|
|
|
|
def delivery
|
|
services = options[:data].shipping_method_services[object.id]
|
|
services ? services[:delivery] : false
|
|
end
|
|
|
|
def email_address
|
|
object.email_address.to_s.reverse
|
|
end
|
|
|
|
def hash
|
|
object.to_param
|
|
end
|
|
|
|
def logo
|
|
object.logo(:medium) if object.logo?
|
|
end
|
|
|
|
def promo_image
|
|
object.promo_image(:large) if object.promo_image?
|
|
end
|
|
|
|
def path
|
|
enterprise_shop_path(object)
|
|
end
|
|
|
|
def producers
|
|
relatives = options[:data].relatives[object.id]
|
|
ids_to_objs(relatives.andand[:producers])
|
|
end
|
|
|
|
def hubs
|
|
relatives = options[:data].relatives[object.id]
|
|
ids_to_objs(relatives.andand[:distributors])
|
|
end
|
|
|
|
# Map svg icons.
|
|
def icon
|
|
icons = {
|
|
:hub => "/assets/map_005-hub.svg",
|
|
:hub_profile => "/assets/map_006-hub-profile.svg",
|
|
:producer_hub => "/assets/map_005-hub.svg",
|
|
:producer_shop => "/assets/map_003-producer-shop.svg",
|
|
:producer => "/assets/map_001-producer-only.svg",
|
|
}
|
|
icons[object.category]
|
|
end
|
|
|
|
# Choose regular icon font for enterprises.
|
|
def icon_font
|
|
icon_fonts = {
|
|
:hub => "ofn-i_063-hub",
|
|
:hub_profile => "ofn-i_064-hub-reversed",
|
|
:producer_hub => "ofn-i_063-hub",
|
|
:producer_shop => "ofn-i_059-producer",
|
|
:producer => "ofn-i_059-producer",
|
|
}
|
|
icon_fonts[object.category]
|
|
end
|
|
|
|
# Choose producer page icon font - yes, sadly its got to be different.
|
|
# This duplicates some code but covers the producer page edge case where
|
|
# producer-hub has a producer icon without needing to duplicate the category logic in angular.
|
|
def producer_icon_font
|
|
icon_fonts = {
|
|
:hub => "",
|
|
:hub_profile => "",
|
|
:producer_hub => "ofn-i_059-producer",
|
|
:producer_shop => "ofn-i_059-producer",
|
|
:producer => "ofn-i_059-producer",
|
|
}
|
|
icon_fonts[object.category]
|
|
end
|
|
|
|
|
|
private
|
|
|
|
def ids_to_objs(ids)
|
|
return [] if ids.blank?
|
|
ids.map { |id| {id: id} }
|
|
end
|
|
end
|