add drop down list for unit preference

This commit is contained in:
Andy Brett
2020-09-07 13:26:09 -07:00
parent adb29a9c8f
commit 5a5cbbd318
3 changed files with 20 additions and 6 deletions

View File

@@ -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
]

View File

@@ -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

View File

@@ -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)