solidus_active_shipping 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +11 -0
- data/.rspec +1 -0
- data/.simplecov +5 -0
- data/.travis.yml +21 -0
- data/Gemfile +18 -0
- data/README.md +192 -0
- data/Rakefile +21 -0
- data/app/assets/javascripts/admin/product_packages/edit.js.coffee +4 -0
- data/app/assets/javascripts/admin/product_packages/index.js.coffee +28 -0
- data/app/assets/javascripts/admin/product_packages/new.js.coffee +7 -0
- data/app/assets/javascripts/spree/backend/solidus_active_shipping.js +0 -0
- data/app/assets/javascripts/spree/frontend/solidus_active_shipping.js +0 -0
- data/app/assets/stylesheets/spree/backend/solidus_active_shipping.css +0 -0
- data/app/assets/stylesheets/spree/frontend/solidus_active_shipping.css +0 -0
- data/app/controllers/spree/admin/active_shipping_settings_controller.rb +27 -0
- data/app/controllers/spree/admin/product_packages_controller.rb +17 -0
- data/app/controllers/spree/admin/products_controller_decorator.rb +12 -0
- data/app/controllers/spree/checkout_controller_decorator.rb +11 -0
- data/app/controllers/spree/orders_controller_decorator.rb +11 -0
- data/app/models/spree/calculator/shipping/active_shipping/base.rb +208 -0
- data/app/models/spree/calculator/shipping/canada_post/base.rb +17 -0
- data/app/models/spree/calculator/shipping/canada_post/expedited.rb +11 -0
- data/app/models/spree/calculator/shipping/canada_post/parcel_surface.rb +11 -0
- data/app/models/spree/calculator/shipping/canada_post/priority_worldwide_intl.rb +12 -0
- data/app/models/spree/calculator/shipping/canada_post/regular.rb +11 -0
- data/app/models/spree/calculator/shipping/canada_post/small_packets_air.rb +11 -0
- data/app/models/spree/calculator/shipping/canada_post/small_packets_surface.rb +11 -0
- data/app/models/spree/calculator/shipping/canada_post/xpresspost.rb +11 -0
- data/app/models/spree/calculator/shipping/canada_post/xpresspost_international.rb +11 -0
- data/app/models/spree/calculator/shipping/fedex/base.rb +21 -0
- data/app/models/spree/calculator/shipping/fedex/express_saver.rb +13 -0
- data/app/models/spree/calculator/shipping/fedex/first_overnight.rb +13 -0
- data/app/models/spree/calculator/shipping/fedex/ground.rb +13 -0
- data/app/models/spree/calculator/shipping/fedex/ground_home_delivery.rb +13 -0
- data/app/models/spree/calculator/shipping/fedex/international_economy.rb +13 -0
- data/app/models/spree/calculator/shipping/fedex/international_economy_freight.rb +13 -0
- data/app/models/spree/calculator/shipping/fedex/international_first.rb +13 -0
- data/app/models/spree/calculator/shipping/fedex/international_ground.rb +13 -0
- data/app/models/spree/calculator/shipping/fedex/international_priority.rb +13 -0
- data/app/models/spree/calculator/shipping/fedex/international_priority_freight.rb +13 -0
- data/app/models/spree/calculator/shipping/fedex/international_priority_saturday_delivery.rb +13 -0
- data/app/models/spree/calculator/shipping/fedex/one_day_freight.rb +13 -0
- data/app/models/spree/calculator/shipping/fedex/one_day_freight_saturday_delivery.rb +13 -0
- data/app/models/spree/calculator/shipping/fedex/priority_overnight.rb +13 -0
- data/app/models/spree/calculator/shipping/fedex/priority_overnight_saturday_delivery.rb +11 -0
- data/app/models/spree/calculator/shipping/fedex/saver.rb +11 -0
- data/app/models/spree/calculator/shipping/fedex/standard_overnight.rb +11 -0
- data/app/models/spree/calculator/shipping/fedex/three_day_freight.rb +11 -0
- data/app/models/spree/calculator/shipping/fedex/three_day_freight_saturday_delivery.rb +11 -0
- data/app/models/spree/calculator/shipping/fedex/two_day.rb +11 -0
- data/app/models/spree/calculator/shipping/fedex/two_day_freight.rb +11 -0
- data/app/models/spree/calculator/shipping/fedex/two_day_freight_saturday_delivery.rb +11 -0
- data/app/models/spree/calculator/shipping/fedex/two_day_saturday_delivery.rb +11 -0
- data/app/models/spree/calculator/shipping/ups/base.rb +30 -0
- data/app/models/spree/calculator/shipping/ups/express.rb +11 -0
- data/app/models/spree/calculator/shipping/ups/ground.rb +11 -0
- data/app/models/spree/calculator/shipping/ups/next_day_air.rb +11 -0
- data/app/models/spree/calculator/shipping/ups/next_day_air_early_am.rb +11 -0
- data/app/models/spree/calculator/shipping/ups/next_day_air_saver.rb +11 -0
- data/app/models/spree/calculator/shipping/ups/saver.rb +11 -0
- data/app/models/spree/calculator/shipping/ups/second_day_air.rb +11 -0
- data/app/models/spree/calculator/shipping/ups/standard.rb +11 -0
- data/app/models/spree/calculator/shipping/ups/three_day_select.rb +11 -0
- data/app/models/spree/calculator/shipping/ups/worldwide_expedited.rb +11 -0
- data/app/models/spree/calculator/shipping/usps/base.rb +84 -0
- data/app/models/spree/calculator/shipping/usps/express_mail.rb +19 -0
- data/app/models/spree/calculator/shipping/usps/express_mail_international.rb +46 -0
- data/app/models/spree/calculator/shipping/usps/first_class_mail_international.rb +31 -0
- data/app/models/spree/calculator/shipping/usps/first_class_mail_international_large_envelope.rb +31 -0
- data/app/models/spree/calculator/shipping/usps/first_class_mail_parcel.rb +28 -0
- data/app/models/spree/calculator/shipping/usps/first_class_package_international.rb +49 -0
- data/app/models/spree/calculator/shipping/usps/global_express_guaranteed.rb +48 -0
- data/app/models/spree/calculator/shipping/usps/media_mail.rb +19 -0
- data/app/models/spree/calculator/shipping/usps/priority_mail.rb +19 -0
- data/app/models/spree/calculator/shipping/usps/priority_mail_flat_rate_envelope.rb +19 -0
- data/app/models/spree/calculator/shipping/usps/priority_mail_international.rb +49 -0
- data/app/models/spree/calculator/shipping/usps/priority_mail_international_large_flat_rate_box.rb +43 -0
- data/app/models/spree/calculator/shipping/usps/priority_mail_international_medium_flat_rate_box.rb +43 -0
- data/app/models/spree/calculator/shipping/usps/priority_mail_international_small_flat_rate_box.rb +43 -0
- data/app/models/spree/calculator/shipping/usps/priority_mail_large_flat_rate_box.rb +19 -0
- data/app/models/spree/calculator/shipping/usps/priority_mail_medium_flat_rate_box.rb +19 -0
- data/app/models/spree/calculator/shipping/usps/priority_mail_small_flat_rate_box.rb +19 -0
- data/app/models/spree/calculator/shipping/usps/standard_post.rb +19 -0
- data/app/models/spree/content_item_decorator.rb +7 -0
- data/app/models/spree/line_item_decorator.rb +4 -0
- data/app/models/spree/package_builder.rb +114 -0
- data/app/models/spree/product_decorator.rb +10 -0
- data/app/models/spree/product_package.rb +10 -0
- data/app/models/spree/stock_location_decorator.rb +10 -0
- data/app/models/spree/variant_decorator.rb +3 -0
- data/app/overrides/spree/admin/shared/_configuration_menu/add_active_shipping_settings_tab.html.erb.deface +3 -0
- data/app/overrides/spree/admin/shared/_product_tabs/add_product_packages_tab.html.erb.deface +7 -0
- data/app/views/spree/admin/active_shipping_settings/edit.html.erb +92 -0
- data/app/views/spree/admin/product_packages/_form.html.erb +24 -0
- data/app/views/spree/admin/product_packages/edit.html.erb +15 -0
- data/app/views/spree/admin/product_packages/index.html.erb +46 -0
- data/app/views/spree/admin/product_packages/new.html.erb +15 -0
- data/config/locales/en.yml +93 -0
- data/config/locales/fr.yml +12 -0
- data/config/routes.rb +9 -0
- data/db/migrate/20130107030221_create_product_packages.rb +12 -0
- data/lib/solidus_active_shipping.rb +3 -0
- data/lib/solidus_active_shipping/engine.rb +44 -0
- data/lib/spree/active_shipping_configuration.rb +24 -0
- data/lib/spree/shipping_error.rb +3 -0
- data/solidus_active_shipping.gemspec +33 -0
- data/spec/cassettes/Checkout/with_valid_shipping_address/does_not_break_the_per-item_shipping_method_calculator.yml +134 -0
- data/spec/cassettes/FedEx_calculators/with_Canadian_origin_address/Spree_Calculator_Shipping_Fedex_Ground/1_1_1_1.yml +48 -0
- data/spec/cassettes/FedEx_calculators/with_Canadian_origin_address/Spree_Calculator_Shipping_Fedex_InternationalEconomy/1_1_2_1.yml +48 -0
- data/spec/cassettes/FedEx_calculators/with_Canadian_origin_address/Spree_Calculator_Shipping_Fedex_InternationalFirst/1_1_3_1.yml +48 -0
- data/spec/cassettes/FedEx_calculators/with_Canadian_origin_address/Spree_Calculator_Shipping_Fedex_InternationalPriority/1_1_4_1.yml +48 -0
- data/spec/cassettes/FedEx_calculators/with_US_origin_address/Spree_Calculator_Shipping_Fedex_ExpressSaver/1_2_5_1.yml +48 -0
- data/spec/cassettes/FedEx_calculators/with_US_origin_address/Spree_Calculator_Shipping_Fedex_FirstOvernight/1_2_1_1.yml +48 -0
- data/spec/cassettes/FedEx_calculators/with_US_origin_address/Spree_Calculator_Shipping_Fedex_GroundHomeDelivery/1_2_6_1.yml +48 -0
- data/spec/cassettes/FedEx_calculators/with_US_origin_address/Spree_Calculator_Shipping_Fedex_PriorityOvernight/1_2_2_1.yml +48 -0
- data/spec/cassettes/FedEx_calculators/with_US_origin_address/Spree_Calculator_Shipping_Fedex_StandardOvernight/1_2_3_1.yml +48 -0
- data/spec/cassettes/FedEx_calculators/with_US_origin_address/Spree_Calculator_Shipping_Fedex_TwoDay/1_2_4_1.yml +48 -0
- data/spec/cassettes/UPS_calculators/with_Canadian_origin_address/Spree_Calculator_Shipping_Ups_Express/1_1_1_1.yml +103 -0
- data/spec/cassettes/UPS_calculators/with_Canadian_origin_address/Spree_Calculator_Shipping_Ups_Saver/1_1_3_1.yml +103 -0
- data/spec/cassettes/UPS_calculators/with_Canadian_origin_address/Spree_Calculator_Shipping_Ups_Standard/1_1_4_1.yml +103 -0
- data/spec/cassettes/UPS_calculators/with_Canadian_origin_address/Spree_Calculator_Shipping_Ups_ThreeDaySelect/1_1_5_1.yml +103 -0
- data/spec/cassettes/UPS_calculators/with_Canadian_origin_address/Spree_Calculator_Shipping_Ups_WorldwideExpedited/1_1_2_1.yml +103 -0
- data/spec/cassettes/UPS_calculators/with_US_origin_address/Spree_Calculator_Shipping_Ups_Ground/1_2_1_1.yml +103 -0
- data/spec/cassettes/UPS_calculators/with_US_origin_address/Spree_Calculator_Shipping_Ups_NextDayAir/1_2_2_1.yml +103 -0
- data/spec/cassettes/UPS_calculators/with_US_origin_address/Spree_Calculator_Shipping_Ups_NextDayAirEarlyAm/1_2_3_1.yml +103 -0
- data/spec/cassettes/UPS_calculators/with_US_origin_address/Spree_Calculator_Shipping_Ups_NextDayAirSaver/1_2_4_1.yml +103 -0
- data/spec/cassettes/UPS_calculators/with_US_origin_address/Spree_Calculator_Shipping_Ups_SecondDayAir/1_2_5_1.yml +103 -0
- data/spec/controllers/admin/active_shipping_settings_controller_spec.rb +38 -0
- data/spec/controllers/admin/product_packages_controller_spec.rb +36 -0
- data/spec/factories/order_factory_override.rb +46 -0
- data/spec/factories/product_package_factory.rb +9 -0
- data/spec/factories/state_factory_override.rb +28 -0
- data/spec/features/checkout_spec.rb +37 -0
- data/spec/fixtures/normal_rates_request.xml +2 -0
- data/spec/integrations/calculators/fedex_spec.rb +56 -0
- data/spec/integrations/calculators/ups_spec.rb +56 -0
- data/spec/lib/spree/active_shipping/bogus_carrier.rb +18 -0
- data/spec/lib/spree/calculator/shipping/bogus_calculator.rb +17 -0
- data/spec/models/active_shipping_calculator_spec.rb +182 -0
- data/spec/models/carriers/usps_calculator_spec.rb +72 -0
- data/spec/models/package_builder_spec.rb +173 -0
- data/spec/spec.opts +6 -0
- data/spec/spec_helper.rb +80 -0
- data/spec/support/capybara.rb +24 -0
- data/spec/support/checkout_helper.rb +12 -0
- data/spec/support/feature_helper.rb +7 -0
- data/spec/support/package_helper.rb +9 -0
- data/spec/support/shared_contexts/checkout_setup.rb +12 -0
- data/spec/support/shared_contexts/package_setup.rb +34 -0
- data/spec/support/shared_contexts/shipping_carriers/fedex.rb +15 -0
- data/spec/support/shared_contexts/shipping_carriers/ups.rb +14 -0
- data/spec/support/shared_contexts/stock_location_setup.rb +26 -0
- data/spec/support/web_fixtures.rb +6 -0
- metadata +444 -0
@@ -0,0 +1,10 @@
|
|
1
|
+
# Add product packages relation
|
2
|
+
Spree::Product.class_eval do
|
3
|
+
has_many :product_packages, dependent: :destroy
|
4
|
+
|
5
|
+
accepts_nested_attributes_for :product_packages, allow_destroy: true, reject_if: ->(pp) { pp[:weight].blank? || Integer(pp[:weight]) < 1 }
|
6
|
+
|
7
|
+
def has_product_packages?
|
8
|
+
product_packages.any?
|
9
|
+
end
|
10
|
+
end
|
@@ -0,0 +1,10 @@
|
|
1
|
+
Spree::StockLocation.class_eval do
|
2
|
+
validates_presence_of :address1, :city, :zipcode, :country_id
|
3
|
+
validate :state_id_or_state_name_is_present
|
4
|
+
|
5
|
+
def state_id_or_state_name_is_present
|
6
|
+
if state_id.nil? && state_name.nil?
|
7
|
+
errors.add(:state_name, "can't be blank")
|
8
|
+
end
|
9
|
+
end
|
10
|
+
end
|
@@ -0,0 +1,7 @@
|
|
1
|
+
<!-- insert_bottom "[data-hook='admin_product_tabs']" -->
|
2
|
+
|
3
|
+
<% if can? :update, @product.product_packages.build %>
|
4
|
+
<li<%== ' class=\"active\"' if current == 'Product Packages' %>>
|
5
|
+
<%= link_to_with_icon 'cube', Spree.t(:product_packages), admin_product_product_packages_url(@product) %>
|
6
|
+
</li>
|
7
|
+
<% end %>
|
@@ -0,0 +1,92 @@
|
|
1
|
+
<%= render :partial => 'spree/admin/shared/configuration_menu' %>
|
2
|
+
|
3
|
+
<% content_for :page_title do %>
|
4
|
+
<%= Spree.t(:active_shipping_settings) %>
|
5
|
+
<% end %>
|
6
|
+
|
7
|
+
<%= form_tag admin_active_shipping_settings_path, :method => :put do |form| %>
|
8
|
+
<div id="preferences" data-hook>
|
9
|
+
<fieldset class="general no-border-top">
|
10
|
+
<div class="row">
|
11
|
+
<div class="alpha six columns">
|
12
|
+
<fieldset class="security no-border-bottom">
|
13
|
+
<legend align="center"><%= Spree.t(:ups_settings)%></legend>
|
14
|
+
<% @preferences_UPS.each do |key|
|
15
|
+
type = @config.preference_type(key) %>
|
16
|
+
<div class="field">
|
17
|
+
<%= label_tag(key, Spree.t(key) + ': ') + tag(:br) if type != :boolean %>
|
18
|
+
<%= preference_field_tag(key, @config[key], :type => type) %>
|
19
|
+
<%= label_tag(key, Spree.t(key)) + tag(:br) if type == :boolean %>
|
20
|
+
</div>
|
21
|
+
<% end %>
|
22
|
+
</fieldset>
|
23
|
+
</div>
|
24
|
+
<div class="omega six columns">
|
25
|
+
<fieldset class="currency no-border-bottom">
|
26
|
+
<legend align="center"><%= Spree.t(:fedex_settings)%></legend>
|
27
|
+
<% @preferences_FedEx.each do |key|
|
28
|
+
type = @config.preference_type(key) %>
|
29
|
+
<div class="field">
|
30
|
+
<%= label_tag(key, Spree.t(key) + ': ') + tag(:br) if type != :boolean %>
|
31
|
+
<%= preference_field_tag(key, @config[key], :type => type) %>
|
32
|
+
<%= label_tag(key, Spree.t(key)) + tag(:br) if type == :boolean %>
|
33
|
+
</div>
|
34
|
+
<% end %>
|
35
|
+
</fieldset>
|
36
|
+
</div>
|
37
|
+
</div>
|
38
|
+
|
39
|
+
<div class="row">
|
40
|
+
<div class="alpha six columns">
|
41
|
+
<fieldset class="security no-border-bottom">
|
42
|
+
<legend align="center"><%= Spree.t(:usps_settings)%></legend>
|
43
|
+
<% @preferences_USPS.each do |key|
|
44
|
+
type = @config.preference_type(key) %>
|
45
|
+
<div class="field">
|
46
|
+
<%= label_tag(key, Spree.t(key) + ': ') + tag(:br) if type != :boolean %>
|
47
|
+
<%= preference_field_tag(key, @config[key], :type => type) %>
|
48
|
+
<%= label_tag(key, Spree.t(key)) + tag(:br) if type == :boolean %>
|
49
|
+
</div>
|
50
|
+
<% end %>
|
51
|
+
</fieldset>
|
52
|
+
</div>
|
53
|
+
<div class="omega six columns">
|
54
|
+
<fieldset class="currency no-border-bottom">
|
55
|
+
<legend align="center"><%= Spree.t(:canada_post_settings)%></legend>
|
56
|
+
<% @preferences_CanadaPost.each do |key|
|
57
|
+
type = @config.preference_type(key) %>
|
58
|
+
<div class="field">
|
59
|
+
<%= label_tag(key, Spree.t(key) + ': ') + tag(:br) if type != :boolean %>
|
60
|
+
<%= preference_field_tag(key, @config[key], :type => type) %>
|
61
|
+
<%= label_tag(key, Spree.t(key)) + tag(:br) if type == :boolean %>
|
62
|
+
</div>
|
63
|
+
<% end %>
|
64
|
+
</fieldset>
|
65
|
+
</div>
|
66
|
+
</div>
|
67
|
+
|
68
|
+
<div class="row">
|
69
|
+
<div class="alpha six columns">
|
70
|
+
<fieldset class="currency no-border-bottom">
|
71
|
+
<legend align="center"><%= Spree.t(:general_settings)%></legend>
|
72
|
+
<% @preferences_GeneralSettings.each do |key|
|
73
|
+
type = @config.preference_type(key) %>
|
74
|
+
<div class="field">
|
75
|
+
<%= label_tag(key, Spree.t(key) + ': ') + tag(:br) if type != :boolean %>
|
76
|
+
<%= preference_field_tag(key, @config[key], :type => type) %>
|
77
|
+
<%= label_tag(key, Spree.t(key)) + tag(:br) if type == :boolean %>
|
78
|
+
</div>
|
79
|
+
<% end %>
|
80
|
+
</fieldset>
|
81
|
+
</div>
|
82
|
+
</div>
|
83
|
+
|
84
|
+
<div class="form-buttons filter-actions actions" data-hook="buttons">
|
85
|
+
<%= button Spree.t(:update), 'icon-refresh' %>
|
86
|
+
<span class="or"><%= Spree.t(:or) %></span>
|
87
|
+
<%= link_to_with_icon 'icon-remove', Spree.t(:cancel), edit_admin_active_shipping_settings_url, :class => 'button' %>
|
88
|
+
</div>
|
89
|
+
|
90
|
+
</fieldset>
|
91
|
+
</div>
|
92
|
+
<% end %>
|
@@ -0,0 +1,24 @@
|
|
1
|
+
<div data-hook="admin_product_package_form_fields">
|
2
|
+
<div class="six columns alpha">
|
3
|
+
<div data-hook="length" class="field">
|
4
|
+
<%= f.label Spree.t(:length) %><br>
|
5
|
+
<%= f.text_field :length %>
|
6
|
+
</div>
|
7
|
+
<div data-hook="width" class="field">
|
8
|
+
<%= f.label Spree.t(:width) %><br>
|
9
|
+
<%= f.text_field :width %>
|
10
|
+
</div>
|
11
|
+
</div>
|
12
|
+
<div class="six columns omega">
|
13
|
+
<div data-hook="height" class="field">
|
14
|
+
<%= f.label Spree.t(:height) %><br>
|
15
|
+
<%= f.text_field :height %>
|
16
|
+
</div>
|
17
|
+
<div data-hook="weight" class="field">
|
18
|
+
<%= f.label Spree.t(:weight) %><br>
|
19
|
+
<%= f.text_field :weight %>
|
20
|
+
</div>
|
21
|
+
</div>
|
22
|
+
</div>
|
23
|
+
|
24
|
+
<div class="clear"></div>
|
@@ -0,0 +1,15 @@
|
|
1
|
+
<%= form_for [:admin, @product, @product_package], :html => { :multipart => true } do |f| %>
|
2
|
+
<fieldset data-hook="edit_product_package">
|
3
|
+
<legend align="center"><%= Spree.t(:edit_package) %></legend>
|
4
|
+
|
5
|
+
<%= render :partial => 'form', :locals => { :f => f } %>
|
6
|
+
|
7
|
+
<div class="form-buttons filter-actions actions" data-hook="buttons">
|
8
|
+
<%= button Spree.t(:update), 'icon-refresh' %>
|
9
|
+
<span class="or"><%= t(:or) %></span>
|
10
|
+
<%= link_to_with_icon 'icon-remove', Spree.t(:cancel), admin_product_product_packages_url(@product), :id => 'cancel_link', :class => 'button' %>
|
11
|
+
</div>
|
12
|
+
</fieldset>
|
13
|
+
<% end %>
|
14
|
+
|
15
|
+
<%= javascript_include_tag 'admin/product_packages/edit.js' %>
|
@@ -0,0 +1,46 @@
|
|
1
|
+
<% content_for :page_actions do %>
|
2
|
+
<li><%= link_to_with_icon('icon-plus', Spree.t(:new_package), new_admin_product_product_package_url(@product), :id => 'new_product_package_link', :class => 'button') %></li>
|
3
|
+
<% end %>
|
4
|
+
|
5
|
+
<% content_for :head do %>
|
6
|
+
<%= javascript_include_tag 'admin/product_packages/index.js' %>
|
7
|
+
<% end %>
|
8
|
+
|
9
|
+
<%# This partial was remove in solidus 1.2 but that is also when Spree.solidus_version was added %>
|
10
|
+
<%= render :partial => 'spree/admin/shared/product_sub_menu' if !Spree.respond_to?(:solidus_version) %>
|
11
|
+
<%= render :partial => 'spree/admin/shared/product_tabs', :locals => { :current => 'Product Packages' } %>
|
12
|
+
|
13
|
+
<div id="product_packages" data-hook></div>
|
14
|
+
|
15
|
+
<% unless @product.reload.product_packages.any? %>
|
16
|
+
<div class="no-objects-found">
|
17
|
+
<%= Spree.t(:no_packages_found) %>.
|
18
|
+
</div>
|
19
|
+
<% else %>
|
20
|
+
<table class="index">
|
21
|
+
<thead data-hook="option_header">
|
22
|
+
<tr data-hook="product_packages_header">
|
23
|
+
<th><%= Spree.t(:length) %></th>
|
24
|
+
<th><%= Spree.t(:width) %></th>
|
25
|
+
<th><%= Spree.t(:height) %></th>
|
26
|
+
<th><%= Spree.t(:weight) %></th>
|
27
|
+
<th class="actions"></th>
|
28
|
+
</tr>
|
29
|
+
</thead>
|
30
|
+
<tbody id="product_packages" data-hook>
|
31
|
+
<% @product.product_packages.each do |package| %>
|
32
|
+
<tr id="<%= dom_id(package) %>" data-hook="product_package_row">
|
33
|
+
<td><%= package.length %></td>
|
34
|
+
<td><%= package.width %></td>
|
35
|
+
<td><%= package.height %></td>
|
36
|
+
<td><%= package.weight %></td>
|
37
|
+
<td class="actions">
|
38
|
+
<%= link_to_with_icon 'icon-edit', Spree.t(:edit), edit_admin_product_product_package_url(@product, package), :class => "edit", :no_text => true, :data => {:action => 'edit'} %>
|
39
|
+
|
40
|
+
<%= link_to_delete package, { :url => admin_product_product_package_url(@product, package), :no_text => true }%>
|
41
|
+
</td>
|
42
|
+
</tr>
|
43
|
+
<% end %>
|
44
|
+
</tbody>
|
45
|
+
</table>
|
46
|
+
<% end %>
|
@@ -0,0 +1,15 @@
|
|
1
|
+
<%= form_for [:admin, @product, @product_package], :html => { :multipart => true } do |f| %>
|
2
|
+
<fieldset data-hook="new_product_package">
|
3
|
+
<legend align="center"><%= Spree.t(:new_package) %></legend>
|
4
|
+
|
5
|
+
<%= render :partial => 'form', :locals => { :f => f } %>
|
6
|
+
|
7
|
+
<div class="form-buttons filter-actions actions" data-hook="buttons">
|
8
|
+
<%= button Spree.t(:update), 'icon-refresh' %>
|
9
|
+
<span class="or"><%= t(:or) %></span>
|
10
|
+
<%= link_to_with_icon 'icon-remove', Spree.t(:cancel), admin_product_product_packages_url(@product), :id => 'cancel_link', :class => 'button' %>
|
11
|
+
</div>
|
12
|
+
</fieldset>
|
13
|
+
<% end %>
|
14
|
+
|
15
|
+
<%= javascript_include_tag 'admin/product_packages/new.js' %>
|
@@ -0,0 +1,93 @@
|
|
1
|
+
---
|
2
|
+
en:
|
3
|
+
fedex:
|
4
|
+
express_saver: "FedEx Express Saver"
|
5
|
+
first_overnight: "FedEx First Overnight"
|
6
|
+
ground: "FedEx Ground"
|
7
|
+
ground_home_delivery: "FedEx Ground Home Delivery"
|
8
|
+
intl_economy: "FedEx International Economy"
|
9
|
+
intl_economy_freight: "FedEx International Economy Freight"
|
10
|
+
intl_first: "FedEx International First"
|
11
|
+
intl_ground: "FedEx International Ground"
|
12
|
+
intl_priority: "FedEx International Priority"
|
13
|
+
intl_priority_freight: "FedEx International Priority Freight"
|
14
|
+
intl_priority_saturday_delivery: "FedEx International Priority Saturday Delivery"
|
15
|
+
one_day_freight: "FedEx 1 Day Freight"
|
16
|
+
one_day_freight_saturday_delivery: "FedEx 1 Day Freight Saturday Delivery"
|
17
|
+
priority_overnight: "FedEx Priority Overnight"
|
18
|
+
priority_overnight_saturday_delivery: "FedEx Priority Overnight Saturday Delivery"
|
19
|
+
saver: "FedEx Saver"
|
20
|
+
standard_overnight: "FedEx Standard Overnight"
|
21
|
+
three_day_freight: "FedEx 3 Day Freight"
|
22
|
+
three_day_freight_saturday_delivery: "FedEx 3 Day Freight Saturday Delivery"
|
23
|
+
two_day: "FedEx 2 Day"
|
24
|
+
two_day_freight: "FedEx 2 Day Freight"
|
25
|
+
two_day_freight_saturday_delivery: "FedEx 2 Day Freight Saturday Delivery"
|
26
|
+
two_day_saturday_delivery: "FedEx 2 Day Saturday Delivery"
|
27
|
+
ups:
|
28
|
+
ground: "UPS Ground"
|
29
|
+
next_day_air: "UPS Next Day Air"
|
30
|
+
next_day_air_early_am: "UPS Next Day Air Early A.M."
|
31
|
+
next_day_air_saver: "UPS Next Day Air Saver"
|
32
|
+
saver: "UPS Saver"
|
33
|
+
second_day_air: "UPS Second Day Air"
|
34
|
+
three_day_select: "UPS Three-Day Select"
|
35
|
+
worldwide_expedited: "UPS Worldwide Expedited"
|
36
|
+
standard: "UPS Standard"
|
37
|
+
express: "UPS Express"
|
38
|
+
usps:
|
39
|
+
express_mail: "USPS Priority Mail Express"
|
40
|
+
express_mail_international: "USPS Priority Mail Express International"
|
41
|
+
first_class_mail_international: "USPS First-Class Mail International Letter"
|
42
|
+
first_class_mail_international_large_envelope: "USPS First-Class Mail International Large Envelope"
|
43
|
+
first_class_package_international: "USPS First-Class Package International Service"
|
44
|
+
first_class_mail_parcel: "USPS First-Class Mail Parcel"
|
45
|
+
media_mail: "USPS Media Mail Parcel"
|
46
|
+
standard_post: "USPS Standard Post"
|
47
|
+
priority_mail: "USPS Priority Mail"
|
48
|
+
priority_mail_small_flat_rate_box: "USPS Priority Mail Small Flat Rate Box"
|
49
|
+
priority_mail_medium_flat_rate_box: "USPS Priority Mail Medium Flat Rate Box"
|
50
|
+
priority_mail_large_flat_rate_box: "USPS Priority Mail Large Flat Rate Box"
|
51
|
+
priority_mail_flat_rate_envelope: "USPS Priority Mail Flat Rate Envelope"
|
52
|
+
priority_mail_international: "USPS Priority Mail International"
|
53
|
+
priority_mail_international_small_flat_rate_box: "USPS Priority Mail International Small Flat Rate Box"
|
54
|
+
priority_mail_international_medium_flat_rate_box: "USPS Priority Mail International Medium Flat Rate Box"
|
55
|
+
priority_mail_international_large_flat_rate_box: "USPS Priority Mail International Large Flat Rate Box"
|
56
|
+
global_express_guaranteed: "USPS Global Express Guaranteed (GXG)"
|
57
|
+
canada_post:
|
58
|
+
regular: "Canada Post Regular"
|
59
|
+
expedited: "Canada Post Expedited"
|
60
|
+
xpresspost: "Canada Post Xpresspost"
|
61
|
+
priority_worldwide_intl: "Canada Post Priority Worldwide INTL"
|
62
|
+
xpresspost_international: "Canada Post XPressPost International"
|
63
|
+
small_packets_air: "Canada Post Small Packets Air"
|
64
|
+
parcel_surface: "Canada Post Parcel Surface"
|
65
|
+
small_packets_surface: "Canada Post Small Packets Surface"
|
66
|
+
shipping_error: "Shipping Error"
|
67
|
+
spree:
|
68
|
+
product_packages: "Product Packages"
|
69
|
+
add_product_packages: "Add Product Packages"
|
70
|
+
length: "Length"
|
71
|
+
new_package: "New Package"
|
72
|
+
edit_package: "Edit Package"
|
73
|
+
active_shipping_settings: "Active Shipping Settings"
|
74
|
+
ups_settings: "UPS Settings"
|
75
|
+
fedex_settings: "FedEx Settings"
|
76
|
+
usps_settings: "USPS Settings"
|
77
|
+
canada_post_settings: "Canada Post Settings"
|
78
|
+
origin_address_settings: "Origin Address Settings"
|
79
|
+
ups_login: 'UPS Login'
|
80
|
+
ups_password: 'UPS Password'
|
81
|
+
ups_key: 'UPS Key'
|
82
|
+
shipper_number: 'Shipper Number'
|
83
|
+
fedex_login: 'Fedex Login'
|
84
|
+
fedex_password: 'Fedex Password'
|
85
|
+
fedex_account: 'Fedex Account'
|
86
|
+
fedex_key: 'Fedex Key'
|
87
|
+
usps_login: 'USPS Login'
|
88
|
+
canada_post_login: 'Canada Post Login'
|
89
|
+
units: 'Units'
|
90
|
+
unit_multiplier: 'Unit Multiplier'
|
91
|
+
default_weight: 'Default Weight'
|
92
|
+
handling_fee: 'Handling Fee'
|
93
|
+
max_weight_per_package: 'Max Weight Per Package'
|
@@ -0,0 +1,12 @@
|
|
1
|
+
---
|
2
|
+
fr:
|
3
|
+
canada_post:
|
4
|
+
regular: "Postes Canada Colis standard"
|
5
|
+
expedited: "Postes Canada Colis accélérés"
|
6
|
+
xpresspost: "Postes Canada Xpresspost"
|
7
|
+
priority_worldwide_intl: "Postes Canada Priorité Mondial INTL"
|
8
|
+
xpresspost_international: "Postes Canada XPressPost International"
|
9
|
+
small_packets_air: "Postes Canada Petits Colis - Air"
|
10
|
+
parcel_surface: "Postes Canada Colis Postaux - Surface"
|
11
|
+
small_packets_surface: "Postes Canada Petits Colis - Surface"
|
12
|
+
shipping_error: "Erreur de livraison"
|
data/config/routes.rb
ADDED
@@ -0,0 +1,12 @@
|
|
1
|
+
class CreateProductPackages < ActiveRecord::Migration
|
2
|
+
def change
|
3
|
+
create_table :spree_product_packages do |t|
|
4
|
+
t.integer "product_id", :null => false
|
5
|
+
t.integer "length", :default => 0, :null => false
|
6
|
+
t.integer "width", :default => 0, :null => false
|
7
|
+
t.integer "height", :default => 0, :null => false
|
8
|
+
t.integer "weight", :default => 0, :null => false
|
9
|
+
t.timestamps :null => false
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
@@ -0,0 +1,44 @@
|
|
1
|
+
module Spree::ActiveShipping
|
2
|
+
end
|
3
|
+
module SolidusActiveShipping
|
4
|
+
class Engine < Rails::Engine
|
5
|
+
|
6
|
+
initializer "spree.active_shipping.preferences", :before => :load_config_initializers do |app|
|
7
|
+
Spree::ActiveShipping::Config = Spree::ActiveShippingConfiguration.new
|
8
|
+
end
|
9
|
+
|
10
|
+
def self.activate
|
11
|
+
Dir[File.join(File.dirname(__FILE__), "../../app/models/spree/calculator/**/base.rb")].sort.each do |c|
|
12
|
+
Rails.env.production? ? require(c) : load(c)
|
13
|
+
end
|
14
|
+
|
15
|
+
Dir.glob(File.join(File.dirname(__FILE__), "../../app/**/*_decorator*.rb")) do |c|
|
16
|
+
Rails.configuration.cache_classes ? require(c) : load(c)
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
config.autoload_paths += %W(#{config.root}/lib)
|
21
|
+
config.to_prepare &method(:activate).to_proc
|
22
|
+
|
23
|
+
initializer "solidus_active_shipping.register.calculators", after: "spree.register.calculators" do |app|
|
24
|
+
if app.config.spree.calculators.shipping_methods
|
25
|
+
classes = Dir.chdir File.join(File.dirname(__FILE__), "../../app/models") do
|
26
|
+
Dir["spree/calculator/**/*.rb"].reject {|path| path =~ /base.rb$/ }.map do |path|
|
27
|
+
path.gsub('.rb', '').camelize.constantize
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
app.config.spree.calculators.shipping_methods.concat classes
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
# sets the manifests / assets to be precompiled, even when initialize_on_precompile is false
|
36
|
+
initializer "spree.assets.precompile", :group => :all do |app|
|
37
|
+
app.config.assets.precompile += %w[
|
38
|
+
admin/product_packages/new.js
|
39
|
+
admin/product_packages/edit.js
|
40
|
+
admin/product_packages/index.js
|
41
|
+
]
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
class Spree::ActiveShippingConfiguration < Spree::Preferences::Configuration
|
2
|
+
|
3
|
+
preference :ups_login, :string, :default => "aunt_judy"
|
4
|
+
preference :ups_password, :string, :default => "secret"
|
5
|
+
preference :ups_key, :string, :default => "developer_key"
|
6
|
+
preference :shipper_number, :string, :default => nil
|
7
|
+
|
8
|
+
preference :fedex_login, :string, :default => "meter_no"
|
9
|
+
preference :fedex_password, :string, :default => "special_sha1_looking_thing_sent_via_email"
|
10
|
+
preference :fedex_account, :string, :default => "account_no"
|
11
|
+
preference :fedex_key, :string, :default => "authorization_key"
|
12
|
+
|
13
|
+
preference :usps_login, :string, :default => "aunt_judy"
|
14
|
+
|
15
|
+
preference :canada_post_login, :string, :default => "canada_post_login"
|
16
|
+
|
17
|
+
preference :units, :string, :default => "imperial"
|
18
|
+
preference :unit_multiplier, :decimal, :default => 16 # 16 oz./lb - assumes variant weights are in lbs
|
19
|
+
preference :default_weight, :integer, :default => 0 # 16 oz./lb - assumes variant weights are in lbs
|
20
|
+
preference :handling_fee, :integer
|
21
|
+
preference :max_weight_per_package, :integer, :default => 0 # 0 means no limit
|
22
|
+
|
23
|
+
preference :test_mode, :boolean, :default => false
|
24
|
+
end
|