From 5a5cbbd3181a71494de522c287a165950e9f98aa Mon Sep 17 00:00:00 2001 From: Andy Brett Date: Mon, 7 Sep 2020 13:26:09 -0700 Subject: [PATCH] add drop down list for unit preference --- .../spree/admin/shipping_methods_controller.rb | 2 +- app/helpers/spree/admin/base_helper.rb | 18 ++++++++++++++---- app/models/calculator/weight.rb | 6 +++++- 3 files changed, 20 insertions(+), 6 deletions(-) diff --git a/app/controllers/spree/admin/shipping_methods_controller.rb b/app/controllers/spree/admin/shipping_methods_controller.rb index b68dca98e3..ebf3e8e432 100644 --- a/app/controllers/spree/admin/shipping_methods_controller.rb +++ b/app/controllers/spree/admin/shipping_methods_controller.rb @@ -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 ] diff --git a/app/helpers/spree/admin/base_helper.rb b/app/helpers/spree/admin/base_helper.rb index 6ffdc3dc2b..833ece1bf7 100644 --- a/app/helpers/spree/admin/base_helper.rb +++ b/app/helpers/spree/admin/base_helper.rb @@ -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("
").html_safe end diff --git a/app/models/calculator/weight.rb b/app/models/calculator/weight.rb index abdf626d05..aa479e7d09 100644 --- a/app/models/calculator/weight.rb +++ b/app/models/calculator/weight.rb @@ -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)