diff --git a/app/controllers/spree/admin/shipping_methods_controller.rb b/app/controllers/spree/admin/shipping_methods_controller.rb index 5fa427772e..b91f8432a9 100644 --- a/app/controllers/spree/admin/shipping_methods_controller.rb +++ b/app/controllers/spree/admin/shipping_methods_controller.rb @@ -84,13 +84,13 @@ module Spree def permitted_resource_params params.require(:shipping_method).permit( - :name, :description, :display_on, - :require_ship_address, :tag_list, :calculator_type, + :name, :description, :display_on, :require_ship_address, :tag_list, :calculator_type, distributor_ids: [], calculator_attributes: [ - :id, :preferred_currency, :preferred_amount, :preferred_per_kg, :preferred_flat_percent, - :preferred_first_item, :preferred_additional_item, :preferred_max_items, - :preferred_minimal_amount, :preferred_normal_amount, :preferred_discount_amount + :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 ] ) end diff --git a/app/helpers/spree/admin/base_helper.rb b/app/helpers/spree/admin/base_helper.rb index 6ffdc3dc2b..157762e823 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,21 @@ module Spree end end + # Here we show a text field for all string fields except when the field name ends in + # "_from_list", in that case we render a dropdown. + # In this specific case, to render the dropdown, the object provided must have a method named + # like "#{field}_values" that returns an array with the string options to be listed. + 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 @@ -91,13 +106,21 @@ module Spree ) end + # maps each preference to a hash containing the label and field html. + # E.g. { :label => "