Shipping methods can be tagged

This commit is contained in:
Rob Harrington
2016-03-17 13:33:14 +11:00
parent 86c80124fc
commit f9acee2be4
7 changed files with 32 additions and 3 deletions

View File

@@ -0,0 +1,2 @@
angular.module("admin.shippingMethods").controller "shippingMethodCtrl", ($scope, shippingMethod) ->
$scope.shippingMethod = shippingMethod

View File

@@ -1 +1 @@
angular.module("admin.shippingMethods", [])
angular.module("admin.shippingMethods", ["ngTagsInput", 'admin.utils'])

View File

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

View File

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

View File

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

View File

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

View File

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