diff --git a/app/assets/javascripts/admin/shipping_methods/controllers/shipping_method_controller.js.coffee b/app/assets/javascripts/admin/shipping_methods/controllers/shipping_method_controller.js.coffee new file mode 100644 index 0000000000..cc7bd4ee3e --- /dev/null +++ b/app/assets/javascripts/admin/shipping_methods/controllers/shipping_method_controller.js.coffee @@ -0,0 +1,2 @@ +angular.module("admin.shippingMethods").controller "shippingMethodCtrl", ($scope, shippingMethod) -> + $scope.shippingMethod = shippingMethod diff --git a/app/assets/javascripts/admin/shipping_methods/shipping_methods.js.coffee b/app/assets/javascripts/admin/shipping_methods/shipping_methods.js.coffee index 01e989a104..232eee7045 100644 --- a/app/assets/javascripts/admin/shipping_methods/shipping_methods.js.coffee +++ b/app/assets/javascripts/admin/shipping_methods/shipping_methods.js.coffee @@ -1 +1 @@ -angular.module("admin.shippingMethods", []) +angular.module("admin.shippingMethods", ["ngTagsInput", 'admin.utils']) diff --git a/app/helpers/admin/injection_helper.rb b/app/helpers/admin/injection_helper.rb index 36463800bc..0c032eaa9e 100644 --- a/app/helpers/admin/injection_helper.rb +++ b/app/helpers/admin/injection_helper.rb @@ -27,6 +27,10 @@ module Admin admin_inject_json_ams_array "admin.shippingMethods", "shippingMethods", @shipping_methods, Api::Admin::IdNameSerializer end + def admin_inject_shipping_method + admin_inject_json_ams "admin.shippingMethods", "shippingMethod", @shipping_method, Api::Admin::ShippingMethodSerializer + end + def admin_inject_shops(ngModule='admin.customers') admin_inject_json_ams_array ngModule, "shops", @shops, Api::Admin::IdNameSerializer end diff --git a/app/models/spree/shipping_method_decorator.rb b/app/models/spree/shipping_method_decorator.rb index b8be603048..f4f1d2c999 100644 --- a/app/models/spree/shipping_method_decorator.rb +++ b/app/models/spree/shipping_method_decorator.rb @@ -1,10 +1,12 @@ Spree::ShippingMethod.class_eval do + acts_as_taggable + has_many :distributor_shipping_methods has_many :distributors, through: :distributor_shipping_methods, class_name: 'Enterprise', foreign_key: 'distributor_id' after_save :touch_distributors attr_accessible :distributor_ids, :description - attr_accessible :require_ship_address + attr_accessible :require_ship_address, :tag_list validates :distributors, presence: { message: "^At least one hub must be selected" } diff --git a/app/overrides/spree/admin/shipping_methods/_form/replace_form_fields.html.haml.deface b/app/overrides/spree/admin/shipping_methods/_form/replace_form_fields.html.haml.deface index 3ec441449e..a2f9ed766a 100644 --- a/app/overrides/spree/admin/shipping_methods/_form/replace_form_fields.html.haml.deface +++ b/app/overrides/spree/admin/shipping_methods/_form/replace_form_fields.html.haml.deface @@ -1,6 +1,9 @@ / replace "div[data-hook='admin_shipping_method_form_fields']" -.alpha.eleven.columns{"data-hook" => "admin_shipping_method_form_fields"} +=admin_inject_shipping_method +.alpha.eleven.columns{ "data-hook" => "admin_shipping_method_form_fields", + "ng-app" => "admin.shippingMethods", + "ng-controller" => "shippingMethodCtrl" } .row .alpha.three.columns = f.label :name, t(:name) @@ -46,6 +49,13 @@   = f.label :pick_up, t(:pick_up) + .row + .alpha.three.columns + = f.label :tags, t(:tags) + .omega.eight.columns + = f.hidden_field :tag_list, "ng-value" => "shippingMethod.tag_list" + %tags-with-translation#something{ object: "shippingMethod" } + .row .alpha.eleven.columns = render :partial => 'spree/admin/shared/calculator_fields', :locals => { :f => f } diff --git a/app/serializers/api/admin/shipping_method_serializer.rb b/app/serializers/api/admin/shipping_method_serializer.rb new file mode 100644 index 0000000000..9fbb864d09 --- /dev/null +++ b/app/serializers/api/admin/shipping_method_serializer.rb @@ -0,0 +1,7 @@ +class Api::Admin::ShippingMethodSerializer < ActiveModel::Serializer + attributes :id, :name, :tags + + def tags + object.tag_list.map{ |t| { text: t } } + end +end diff --git a/spec/features/admin/shipping_methods_spec.rb b/spec/features/admin/shipping_methods_spec.rb index 9f04b6707b..646b383c21 100644 --- a/spec/features/admin/shipping_methods_spec.rb +++ b/spec/features/admin/shipping_methods_spec.rb @@ -93,12 +93,16 @@ feature 'shipping methods' do fill_in 'shipping_method_name', :with => 'Teleport' check "shipping_method_distributor_ids_#{distributor1.id}" + find(:css, "tags-input .tags input").set "local\n" + click_button 'Create' flash_message.should == 'Shipping method "Teleport" has been successfully created!' + expect(first('tags-input .tag-list ti-tag-item')).to have_content "local" shipping_method = Spree::ShippingMethod.find_by_name('Teleport') shipping_method.distributors.should == [distributor1] + shipping_method.tag_list.should == ["local"] end it "shows me only shipping methods I have access to" do