mirror of
https://github.com/openfoodfoundation/openfoodnetwork
synced 2026-01-12 18:36:49 +00:00
add drop down list for unit preference
This commit is contained in:
@@ -88,7 +88,7 @@ module Spree
|
||||
:require_ship_address, :tag_list, :calculator_type,
|
||||
distributor_ids: [],
|
||||
calculator_attributes: [
|
||||
:id, :preferred_currency, :preferred_amount, :preferred_unit, :preferred_per_unit, :preferred_flat_percent,
|
||||
:id, :preferred_currency, :preferred_amount, :preferred_unit_from_list, :preferred_per_unit, :preferred_flat_percent,
|
||||
:preferred_first_item, :preferred_additional_item, :preferred_max_items,
|
||||
:preferred_minimal_amount, :preferred_normal_amount, :preferred_discount_amount
|
||||
]
|
||||
|
||||
@@ -45,14 +45,14 @@ module Spree
|
||||
end
|
||||
end
|
||||
|
||||
def preference_field_for(form, field, options)
|
||||
def preference_field_for(form, field, options, object)
|
||||
case options[:type]
|
||||
when :integer
|
||||
form.text_field(field, preference_field_options(options))
|
||||
when :boolean
|
||||
form.check_box(field, preference_field_options(options))
|
||||
when :string
|
||||
form.text_field(field, preference_field_options(options))
|
||||
preference_field_for_text_field(form, field, options, object)
|
||||
when :password
|
||||
form.password_field(field, preference_field_options(options))
|
||||
when :text
|
||||
@@ -62,6 +62,16 @@ module Spree
|
||||
end
|
||||
end
|
||||
|
||||
def preference_field_for_text_field(form, field, options, object)
|
||||
if field.end_with?('_from_list') && object.respond_to?("#{field}_values")
|
||||
list_values = object.__send__("#{field}_values")
|
||||
selected_value = object.__send__(field)
|
||||
form.select(field, options_for_select(list_values, selected_value), preference_field_options(options))
|
||||
else
|
||||
form.text_field(field, preference_field_options(options))
|
||||
end
|
||||
end
|
||||
|
||||
def preference_field_options(options)
|
||||
field_options = case options[:type]
|
||||
when :integer
|
||||
@@ -95,8 +105,8 @@ module Spree
|
||||
return unless object.respond_to?(:preferences)
|
||||
|
||||
object.preferences.keys.map{ |key|
|
||||
form.label("preferred_#{key}", Spree.t(key) + ": ") +
|
||||
preference_field_for(form, "preferred_#{key}", type: object.preference_type(key))
|
||||
form.label("preferred_#{key}", Spree.t(key.to_s.gsub("_from_list", "")) + ": ") +
|
||||
preference_field_for(form, "preferred_#{key}", { type: object.preference_type(key) }, object)
|
||||
}.join("<br />").html_safe
|
||||
end
|
||||
|
||||
|
||||
@@ -4,7 +4,7 @@ module Calculator
|
||||
class Weight < Spree::Calculator
|
||||
extend Spree::LocalizedNumber
|
||||
preference :per_unit, :decimal, default: 0.0
|
||||
preference :unit, :string, default: "kg"
|
||||
preference :unit_from_list, :string, default: "kg"
|
||||
localize_number :preferred_per_unit
|
||||
|
||||
def self.description
|
||||
@@ -16,6 +16,10 @@ module Calculator
|
||||
(total_weight(line_items) * preferred_per_unit).round(2)
|
||||
end
|
||||
|
||||
def preferred_unit_from_list_values
|
||||
["kg", "lb"]
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def total_weight(line_items)
|
||||
|
||||
Reference in New Issue
Block a user