spree 0.4.1 → 0.5.0
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of spree might be problematic. Click here for more details.
- data/CHANGELOG +35 -0
- data/CONTRIBUTORS +2 -1
- data/README.markdown +8 -52
- data/app/controllers/account_controller.rb +1 -1
- data/app/controllers/addresses_controller.rb +5 -1
- data/app/controllers/admin/inventory_settings_controller.rb +13 -0
- data/app/controllers/admin/option_types_controller.rb +1 -1
- data/app/controllers/admin/orders_controller.rb +14 -8
- data/app/controllers/admin/products_controller.rb +2 -0
- data/app/controllers/admin/variants_controller.rb +7 -0
- data/app/controllers/content_controller.rb +5 -0
- data/app/controllers/creditcard_payments_controller.rb +2 -2
- data/app/controllers/orders_controller.rb +18 -2
- data/app/helpers/admin/inventory_settings_helper.rb +5 -0
- data/app/helpers/admin/product_properties_helper.rb +10 -2
- data/app/helpers/products_helper.rb +2 -2
- data/app/models/address.rb +2 -2
- data/app/models/app_configuration.rb +1 -0
- data/app/models/creditcard_payment.rb +6 -14
- data/app/models/order.rb +6 -12
- data/app/models/order_filter.rb +1 -0
- data/app/models/product.rb +9 -0
- data/app/models/product_property.rb +1 -0
- data/app/models/property.rb +0 -1
- data/app/models/zone.rb +17 -3
- data/app/views/account/login.html.erb +2 -14
- data/app/views/admin/configurations/index.html.erb +4 -0
- data/app/views/admin/inventory_settings/edit.html.erb +18 -0
- data/app/views/admin/inventory_settings/show.html.erb +11 -0
- data/app/views/admin/orders/_address.html.erb +1 -1
- data/app/views/admin/orders/index.html.erb +5 -1
- data/app/views/admin/orders/show.html.erb +3 -3
- data/app/views/admin/product_properties/_product_property.html.erb +6 -3
- data/app/views/admin/products/_form.html.erb +9 -1
- data/app/views/admin/prototypes/select.rjs +3 -1
- data/app/views/admin/variants/_form.html.erb +6 -0
- data/app/views/admin/variants/index.html.erb +7 -1
- data/app/views/creditcard_payments/_form_credit_card.html.erb +1 -1
- data/app/views/creditcard_payments/new.html.erb +7 -2
- data/app/views/products/show.html.erb +8 -2
- data/app/views/shared/_login.html.erb +17 -0
- data/app/views/shared/_products.html.erb +1 -1
- data/app/views/users/_form.html.erb +1 -1
- data/app/views/users/new.html.erb +19 -8
- data/config/boot.rb +1 -1
- data/config/database.yml +7 -3
- data/config/environment.rb +16 -2
- data/config/routes.rb +4 -0
- data/db/migrate/20081016002224_remove_defunct_order_fields.rb +10 -0
- data/db/migrate/20081016162924_drop_category_id_from_products.rb +9 -0
- data/db/sample/addresses.yml +14 -0
- data/db/sample/orders.yml +0 -1
- data/lang/ui/de-DE.yml +2 -1
- data/lang/ui/en-US.yml +50 -25
- data/lang/ui/es-ES.yml +2 -1
- data/lang/ui/it-IT.yml +2 -1
- data/lang/ui/pl-PL.yml +1 -0
- data/lang/ui/pt-BR.yml +5 -2
- data/lib/authenticated_system.rb +1 -1
- data/lib/generators/extension/extension_generator.rb +1 -0
- data/lib/generators/extension/templates/extension.rb +4 -5
- data/lib/generators/extension/templates/tasks.rake +12 -0
- data/lib/generators/extension_migration/extension_migration_generator.rb +32 -0
- data/lib/generators/extension_migration/templates/migration.rb +7 -0
- data/lib/spree.rb +2 -2
- data/lib/spree/extension.rb +0 -7
- data/lib/spree/extension_loader.rb +0 -8
- data/lib/tasks/extensions.rake +47 -0
- data/public/javascripts/application.js +34 -0
- data/public/javascripts/spree-yui.js +2 -2
- data/public/stylesheets/spree.css +11 -1
- data/spec/fixtures/preferences.yml +14 -6
- data/spec/models/address_spec.rb +78 -0
- data/spec/models/country_spec.rb +29 -0
- data/spec/models/option_type_spec.rb +36 -0
- data/spec/models/option_value_spec.rb +39 -0
- data/spec/models/product_option_type_spec.rb +38 -0
- data/spec/models/product_property_spec.rb +36 -0
- data/spec/models/product_spec.rb +109 -32
- data/spec/models/property_spec.rb +38 -0
- data/spec/models/prototype_spec.rb +35 -0
- data/spec/models/state_spec.rb +28 -0
- data/spec/models/taxon_spec.rb +38 -0
- data/spec/models/taxonomy_spec.rb +37 -0
- data/spec/models/variant_spec.rb +73 -12
- data/spec/models/zone_spec.rb +35 -15
- data/spec/spec_helper.rb +15 -0
- data/spec/views/admin/configurations/index.html.erb_spec.rb +29 -0
- data/spec/views/admin/mail_settings/show.html.erb_spec.rb +3 -3
- data/spec/views/products/index.html.erb_spec.rb +46 -0
- data/spec/views/products/show.html.erb_spec.rb +46 -0
- data/vendor/extensions/flat_rate_shipping/README.markdown +3 -0
- data/vendor/extensions/flat_rate_shipping/Rakefile +120 -0
- data/vendor/extensions/flat_rate_shipping/flat_rate_shipping_extension.rb +17 -0
- data/vendor/extensions/flat_rate_shipping/lib/flat_rate_shipping_configuration.rb +7 -0
- data/vendor/extensions/flat_rate_shipping/lib/spree/flat_rate_shipping/calculator.rb +9 -0
- data/vendor/extensions/flat_rate_shipping/lib/spree/flat_rate_shipping/config.rb +22 -0
- data/vendor/extensions/flat_rate_shipping/lib/tasks/flat_rate_shipping_extension_tasks.rake +29 -0
- data/vendor/extensions/flat_rate_shipping/spec/spec.opts +6 -0
- data/vendor/extensions/flat_rate_shipping/spec/spec_helper.rb +37 -0
- data/vendor/extensions/localization/localization_extension.rb +1 -6
- data/vendor/extensions/payment_gateway/lib/gateway_config.rb +7 -0
- data/vendor/extensions/payment_gateway/lib/spree/gateway/config.rb +22 -0
- data/vendor/extensions/payment_gateway/lib/spree/payment_gateway.rb +27 -3
- data/vendor/extensions/payment_gateway/payment_gateway_extension.rb +0 -4
- data/vendor/extensions/shipping/README.markdown +3 -0
- data/vendor/extensions/shipping/Rakefile +120 -0
- data/vendor/extensions/shipping/app/controllers/admin/shipping_categories_controller.rb +17 -0
- data/vendor/extensions/shipping/app/controllers/admin/shipping_methods_controller.rb +21 -0
- data/vendor/extensions/shipping/app/controllers/shipments_controller.rb +84 -0
- data/vendor/extensions/shipping/app/helpers/admin/shipping_categories_helper.rb +2 -0
- data/vendor/extensions/shipping/app/helpers/admin/shipping_methods_helper.rb +2 -0
- data/vendor/extensions/shipping/app/helpers/shipments_helper.rb +20 -0
- data/vendor/extensions/shipping/app/models/shipment.rb +11 -0
- data/vendor/extensions/shipping/app/models/shipping_category.rb +3 -0
- data/vendor/extensions/shipping/app/models/shipping_method.rb +12 -0
- data/vendor/extensions/shipping/app/views/admin/shipping_categories/_form.html.erb +6 -0
- data/vendor/extensions/shipping/app/views/admin/shipping_categories/edit.html.erb +8 -0
- data/vendor/extensions/shipping/app/views/admin/shipping_categories/index.html.erb +24 -0
- data/vendor/extensions/shipping/app/views/admin/shipping_categories/new.html.erb +10 -0
- data/vendor/extensions/shipping/app/views/admin/shipping_methods/_form.html.erb +14 -0
- data/vendor/extensions/shipping/app/views/admin/shipping_methods/edit.html.erb +8 -0
- data/vendor/extensions/shipping/app/views/admin/shipping_methods/index.html.erb +28 -0
- data/vendor/extensions/shipping/app/views/admin/shipping_methods/new.html.erb +10 -0
- data/vendor/extensions/shipping/app/views/orders/fatal_shipping.html.erb +6 -0
- data/vendor/extensions/shipping/app/views/shipments/_form.html.erb +46 -0
- data/vendor/extensions/shipping/app/views/shipments/edit.html.erb +8 -0
- data/vendor/extensions/shipping/app/views/shipments/new.html.erb +8 -0
- data/vendor/extensions/shipping/db/migrate/20081003211336_create_shipping_methods.rb +14 -0
- data/vendor/extensions/shipping/db/migrate/20081003233427_create_shipping_categories.rb +15 -0
- data/vendor/extensions/shipping/db/migrate/20081015001711_create_shipments.rb +14 -0
- data/vendor/extensions/shipping/db/migrate/20081023134446_add_product_dimensions.rb +19 -0
- data/vendor/extensions/shipping/db/sample/shipping_categories.yml +2 -0
- data/vendor/extensions/shipping/db/sample/shipping_methods.yml +12 -0
- data/vendor/extensions/shipping/db/sample/zone_members.yml +8 -0
- data/vendor/extensions/shipping/db/sample/zones.yml +3 -0
- data/vendor/extensions/shipping/lang/en-US.yml +9 -0
- data/vendor/extensions/shipping/lib/spree/shipping_calculator.rb +37 -0
- data/vendor/extensions/shipping/lib/spree/shipping_error.rb +3 -0
- data/vendor/extensions/shipping/lib/tasks/shipping_extension_tasks.rake +29 -0
- data/vendor/extensions/shipping/shipping_extension.rb +39 -0
- data/vendor/extensions/shipping/spec/controllers/admin/shipping_categories_controller_spec.rb +10 -0
- data/vendor/extensions/shipping/spec/controllers/admin/shipping_methods_controller_spec.rb +10 -0
- data/vendor/extensions/shipping/spec/models/order_spec.rb +98 -0
- data/vendor/extensions/shipping/spec/models/shipment_spec.rb +26 -0
- data/vendor/extensions/shipping/spec/models/shipping_category_spec.rb +8 -0
- data/vendor/extensions/shipping/spec/models/shipping_method_spec.rb +53 -0
- data/vendor/extensions/shipping/spec/spec.opts +6 -0
- data/vendor/extensions/shipping/spec/spec_helper.rb +37 -0
- data/vendor/extensions/tax_calculator/lib/spree/sales_tax_calculator.rb +12 -4
- data/vendor/extensions/tax_calculator/spec/controllers/tax_calculator_spec.rb +0 -4
- data/vendor/extensions/tax_calculator/spec/models/sales_tax_calculator_spec.rb +14 -14
- data/vendor/extensions/tax_calculator/tax_calculator_extension.rb +0 -4
- data/vendor/plugins/resource_controller/README.rdoc +38 -6
- data/vendor/plugins/resource_controller/Rakefile +7 -20
- data/vendor/plugins/resource_controller/TODO +0 -1
- data/vendor/plugins/resource_controller/lib/resource_controller/helpers/current_objects.rb +71 -69
- data/vendor/plugins/resource_controller/lib/resource_controller/helpers/internal.rb +69 -65
- data/vendor/plugins/resource_controller/lib/resource_controller/helpers/nested.rb +62 -57
- data/vendor/plugins/resource_controller/lib/resource_controller/helpers/singleton_customizations.rb +50 -46
- data/vendor/plugins/resource_controller/lib/resource_controller/helpers/urls.rb +73 -69
- data/vendor/plugins/resource_controller/resource_controller.gemspec +4 -3
- data/vendor/plugins/resource_controller/test/app/controllers/cms/personnel_controller.rb +2 -0
- data/vendor/plugins/resource_controller/test/app/controllers/cms/photos_controller.rb +6 -0
- data/vendor/plugins/resource_controller/test/app/models/personnel.rb +3 -0
- data/vendor/plugins/resource_controller/test/app/models/photo.rb +1 -0
- data/vendor/plugins/resource_controller/test/app/views/cms/photos/edit.rhtml +17 -0
- data/vendor/plugins/resource_controller/test/app/views/cms/photos/index.rhtml +20 -0
- data/vendor/plugins/resource_controller/test/app/views/cms/photos/new.rhtml +16 -0
- data/vendor/plugins/resource_controller/test/app/views/cms/photos/show.rhtml +8 -0
- data/vendor/plugins/resource_controller/test/config/database.yml +9 -0
- data/vendor/plugins/resource_controller/test/config/environment.rb +1 -18
- data/vendor/plugins/resource_controller/test/config/initializers/inflections.rb +14 -0
- data/vendor/plugins/resource_controller/test/config/routes.rb +3 -0
- data/vendor/plugins/resource_controller/test/db/migrate/013_create_personnel.rb +11 -0
- data/vendor/plugins/resource_controller/test/db/migrate/014_add_personnel_id_to_photos.rb +9 -0
- data/vendor/plugins/resource_controller/test/test/fixtures/personnel.yml +5 -0
- data/vendor/plugins/resource_controller/test/test/functional/cms/photos_controller_test.rb +43 -0
- metadata +136 -6
- data/app/models/spree/extension_meta.rb +0 -5
- data/app/models/variants.rb +0 -2
- data/vendor/plugins/resource_controller/lib/resource_controller/version.rb +0 -9
@@ -0,0 +1,20 @@
|
|
1
|
+
module ShipmentsHelper
|
2
|
+
# Creates a radio button to represent a choice of shipping method. The choice will be disabled if for some
|
3
|
+
# reason the rate is nil (perhaps the web service didn't return a quote for that method for some reason.)
|
4
|
+
def shipping_radio(shipping_method, order)
|
5
|
+
cost = shipping_method.calculate_shipping(@order)
|
6
|
+
checked = @shipment.shipping_method == shipping_method || @default_method == shipping_method
|
7
|
+
if cost
|
8
|
+
radio = "<input type='radio' name='method_id' value='#{shipping_method.id}' #{"checked='true'" if checked} onclick='calculate_order_total(this);'/>"
|
9
|
+
radio += shipping_method.name
|
10
|
+
radio += " (Cost: #{number_to_currency(cost)})"
|
11
|
+
else
|
12
|
+
radio = "<input type='radio' name='method_id' disabled='true' onclick='calculate_order_total(this);'/>"
|
13
|
+
radio += "<span class='disabled'>#{shipping_method.name}</span>"
|
14
|
+
end
|
15
|
+
|
16
|
+
radio += "<script type=""text/javascript"">shipping_costs.set('#{shipping_method.id}',#{cost});</script>"
|
17
|
+
|
18
|
+
radio
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,11 @@
|
|
1
|
+
class Shipment < ActiveRecord::Base
|
2
|
+
belongs_to :order
|
3
|
+
belongs_to :shipping_method
|
4
|
+
before_save :calculate_shipping
|
5
|
+
|
6
|
+
private
|
7
|
+
def calculate_shipping
|
8
|
+
calculator = shipping_method.shipping_calculator.constantize.new
|
9
|
+
order.update_attribute(:ship_amount, calculator.calculate_shipping(order))
|
10
|
+
end
|
11
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
class ShippingMethod < ActiveRecord::Base
|
2
|
+
belongs_to :zone
|
3
|
+
|
4
|
+
def available?(order)
|
5
|
+
zone.include?(order.address)
|
6
|
+
end
|
7
|
+
|
8
|
+
def calculate_shipping(order)
|
9
|
+
return 0 unless zone.include?(order.address)
|
10
|
+
return shipping_calculator.constantize.new.send(:calculate_shipping, order)
|
11
|
+
end
|
12
|
+
end
|
@@ -0,0 +1,8 @@
|
|
1
|
+
<h1><%= t("Editing Shipping Category") %></h1>
|
2
|
+
<%= error_messages_for :shipping_category %>
|
3
|
+
<% form_for(:shipping_category, :url => object_url, :html => { :method => :put }) do |f| %>
|
4
|
+
<%= render :partial => "form", :locals => { :f => f } %>
|
5
|
+
<p>
|
6
|
+
<%=submit_tag t("Update")%>
|
7
|
+
</p>
|
8
|
+
<% end %>
|
@@ -0,0 +1,24 @@
|
|
1
|
+
<h1><%=t("Shipping Categories") %></h1>
|
2
|
+
<table class="admin-report" width="545">
|
3
|
+
<thead>
|
4
|
+
<tr>
|
5
|
+
<th><%=t("Name")%></th>
|
6
|
+
<th><%=t("Action")%></th>
|
7
|
+
</tr>
|
8
|
+
</thead>
|
9
|
+
<tbody>
|
10
|
+
<% @shipping_categories.each do |shipping_category| %>
|
11
|
+
<tr class="<%= cycle('even', 'odd') %>">
|
12
|
+
<td><%=shipping_category.name %></td>
|
13
|
+
<td>
|
14
|
+
<%=link_to t("Edit"), edit_object_url(shipping_category) %> |
|
15
|
+
<%=link_to t("Delete"), object_url(shipping_category), :method => :delete %>
|
16
|
+
</td>
|
17
|
+
</tr>
|
18
|
+
<% end %>
|
19
|
+
<% if @shipping_categories.empty? %>
|
20
|
+
<tr><td colspan="5">None.</td></tr>
|
21
|
+
<% end %>
|
22
|
+
</tbody>
|
23
|
+
</table>
|
24
|
+
<%= link_to t("New Shipping Category"), new_object_url %>
|
@@ -0,0 +1,10 @@
|
|
1
|
+
<h1><%= t("New Shipping Category") %></h1>
|
2
|
+
|
3
|
+
<%= error_messages_for :shipping_category %>
|
4
|
+
|
5
|
+
<% form_for(:shipping_category, :url => collection_url) do |f| %>
|
6
|
+
<%= render :partial => "form", :locals => { :f => f } %>
|
7
|
+
<p>
|
8
|
+
<%= submit_tag t("Create") %>
|
9
|
+
</p>
|
10
|
+
<% end %>
|
@@ -0,0 +1,14 @@
|
|
1
|
+
<table>
|
2
|
+
<tr>
|
3
|
+
<td><%=t("Name")%>:</td>
|
4
|
+
<td><%= f.text_field :name, {"style" => "width:200px"} %></td>
|
5
|
+
</tr>
|
6
|
+
<tr>
|
7
|
+
<td><%=t("Zone")%>:</td>
|
8
|
+
<td><%= collection_select(:shipping_method, :zone_id, @available_zones, :id, :name, {}, {"style" => "width:200px"}) %></td>
|
9
|
+
</tr>
|
10
|
+
<tr>
|
11
|
+
<td><%=t("Shipping Calculator")%>:</td>
|
12
|
+
<td><%= f.text_field :shipping_calculator, {"style" => "width:200px"} %></td>
|
13
|
+
</tr>
|
14
|
+
</table>
|
@@ -0,0 +1,8 @@
|
|
1
|
+
<h1><%= t("Editing Shipping Method") %></h1>
|
2
|
+
<%= error_messages_for :shipping_rate %>
|
3
|
+
<% form_for(:shipping_method, :url => object_url, :html => { :method => :put }) do |f| %>
|
4
|
+
<%= render :partial => "form", :locals => { :f => f } %>
|
5
|
+
<p>
|
6
|
+
<%=submit_tag t("Update")%>
|
7
|
+
</p>
|
8
|
+
<% end %>
|
@@ -0,0 +1,28 @@
|
|
1
|
+
<h1><%=t("Shipping Methods") %></h1>
|
2
|
+
<table class="admin-report" width="545">
|
3
|
+
<thead>
|
4
|
+
<tr>
|
5
|
+
<th><%=t("Name")%></th>
|
6
|
+
<th><%=t("Zone")%></th>
|
7
|
+
<th><%=t("Calculator")%></th>
|
8
|
+
<th><%=t("Action")%></th>
|
9
|
+
</tr>
|
10
|
+
</thead>
|
11
|
+
<tbody>
|
12
|
+
<% @shipping_methods.each do |shipping_method| %>
|
13
|
+
<tr class="<%= cycle('even', 'odd') %>">
|
14
|
+
<td><%=shipping_method.name %></td>
|
15
|
+
<td><%=shipping_method.zone.name %></td>
|
16
|
+
<td><%=shipping_method.shipping_calculator %></td>
|
17
|
+
<td>
|
18
|
+
<%=link_to t("Edit"), edit_object_url(shipping_method) %> |
|
19
|
+
<%=link_to t("Delete"), object_url(shipping_method), :method => :delete %>
|
20
|
+
</td>
|
21
|
+
</tr>
|
22
|
+
<% end %>
|
23
|
+
<% if @shipping_methods.empty? %>
|
24
|
+
<tr><td colspan="5">None.</td></tr>
|
25
|
+
<% end %>
|
26
|
+
</tbody>
|
27
|
+
</table>
|
28
|
+
<%= link_to t("New Shipping Method"), new_object_url %>
|
@@ -0,0 +1,10 @@
|
|
1
|
+
<h1><%= t("New Shipping Method") %></h1>
|
2
|
+
|
3
|
+
<%= error_messages_for :shipping_method %>
|
4
|
+
|
5
|
+
<% form_for(:shipping_method, :url => collection_url) do |f| %>
|
6
|
+
<%= render :partial => "form", :locals => { :f => f } %>
|
7
|
+
<p>
|
8
|
+
<%= submit_tag t("Create") %>
|
9
|
+
</p>
|
10
|
+
<% end %>
|
@@ -0,0 +1,6 @@
|
|
1
|
+
<!-- NOTE: Hopefull this page is never seen. Its suggested that you customize it for each application anyways so we're
|
2
|
+
not bothering with translation (the flash error message will be translated.)_ -->
|
3
|
+
<p>
|
4
|
+
We are experiencing technical difficulties obtaining a shipping quote from one or more carriers. Your order has been
|
5
|
+
saved and we hope to resolve the issue shortly. We appologize for the inconvenience.
|
6
|
+
</p>
|
@@ -0,0 +1,46 @@
|
|
1
|
+
<table class="order-summary" style="width:100%;">
|
2
|
+
<tr>
|
3
|
+
<th><%= t('Item Description') %></th>
|
4
|
+
<th><%= t('Price') %></th>
|
5
|
+
<th><%= t('Qty') %></th>
|
6
|
+
<th width="250" align="right"><%= t('Total') %></th>
|
7
|
+
</tr>
|
8
|
+
<% @order.line_items.each do |item| %>
|
9
|
+
<tr >
|
10
|
+
<td width="300"><%=item.variant.product.name-%> <%= "(" + variant_options(item.variant) + ")" unless item.variant .option_values.empty? %></td>
|
11
|
+
<td valign="top"><%= number_to_currency item.price -%></td>
|
12
|
+
<td valign="top"><%=item.quantity-%></td>
|
13
|
+
<td valign="top" align="right"><%= number_to_currency (item.price * item.quantity)-%></td>
|
14
|
+
</tr>
|
15
|
+
<% end %>
|
16
|
+
<tr id="subtotal-row">
|
17
|
+
<td colspan="3" align="right"><b><%= t('Subtotal') %>:</b></td>
|
18
|
+
<td align="right"><%= number_to_currency @order.item_total -%></td>
|
19
|
+
</tr>
|
20
|
+
<tr>
|
21
|
+
<td colspan="3" align="right"><b><%= t('Tax') %>:</b></td>
|
22
|
+
<td align="right"><%= number_to_currency @order.tax_amount -%></td>
|
23
|
+
</tr>
|
24
|
+
<tr><th colspan="4"/></tr>
|
25
|
+
<tr>
|
26
|
+
<th colspan="4"><%= t('Select preferred shipping option') %></th>
|
27
|
+
</tr>
|
28
|
+
<tr>
|
29
|
+
<td class="simple-radios">
|
30
|
+
<% @shipping_methods.each do |shipping_method| %>
|
31
|
+
<li>
|
32
|
+
<%= shipping_radio(shipping_method, @order) %>
|
33
|
+
</li>
|
34
|
+
<% end%>
|
35
|
+
</td>
|
36
|
+
</tr>
|
37
|
+
<tr>
|
38
|
+
<td colspan="3" align="right"><b><%= t('Order Total') %>:</b></td>
|
39
|
+
<td id="order_total_cell" align="right"><%= number_to_currency(@order.total + @default_method.calculate_shipping(@order))%></td>
|
40
|
+
</tr>
|
41
|
+
</table>
|
42
|
+
<script type="text/javascript">
|
43
|
+
var order_total_without_shipping = <%= @order.total %>;
|
44
|
+
</script>
|
45
|
+
|
46
|
+
|
@@ -0,0 +1,8 @@
|
|
1
|
+
<%= error_messages_for :shipment %>
|
2
|
+
<h1><%= t("Shipment") %></h1>
|
3
|
+
<% form_for(:shipment, :url => object_url, :html => { :method => :put }) do |f| %>
|
4
|
+
<%= render :partial => "form", :locals => { :f => f } %>
|
5
|
+
<div align="right">
|
6
|
+
<%= submit_tag t('Continue') %>
|
7
|
+
</div>
|
8
|
+
<% end %>
|
@@ -0,0 +1,8 @@
|
|
1
|
+
<%=error_messages_for :shipment%>
|
2
|
+
<h1><%= t("Shipment")%></h1>
|
3
|
+
<% form_for(:shipment, :url => order_shipments_url(@order)) do |f| %>
|
4
|
+
<%= render :partial => 'form', :locals => {:f => f} %>
|
5
|
+
<div align="right">
|
6
|
+
<%= submit_tag t('Continue') %>
|
7
|
+
</div>
|
8
|
+
<% end %>
|
@@ -0,0 +1,14 @@
|
|
1
|
+
class CreateShippingMethods < ActiveRecord::Migration
|
2
|
+
def self.up
|
3
|
+
create_table :shipping_methods do |t|
|
4
|
+
t.references :zone
|
5
|
+
t.string :shipping_calculator
|
6
|
+
t.string :name
|
7
|
+
t.timestamps
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
def self.down
|
12
|
+
drop_table :shipping_methods
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
class CreateShippingCategories < ActiveRecord::Migration
|
2
|
+
def self.up
|
3
|
+
create_table :shipping_categories do |t|
|
4
|
+
t.string :name
|
5
|
+
t.timestamps
|
6
|
+
end
|
7
|
+
|
8
|
+
add_column :products, :shipping_category_id, :integer, :default => nil
|
9
|
+
end
|
10
|
+
|
11
|
+
def self.down
|
12
|
+
drop_table :shipping_categories
|
13
|
+
remove_column :products, :shipping_category_id
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
class CreateShipments < ActiveRecord::Migration
|
2
|
+
def self.up
|
3
|
+
create_table :shipments do |t|
|
4
|
+
t.references :order
|
5
|
+
t.references :shipping_method
|
6
|
+
t.string :tracking
|
7
|
+
t.timestamps
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
def self.down
|
12
|
+
drop_table :shipments
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
class AddProductDimensions < ActiveRecord::Migration
|
2
|
+
def self.up
|
3
|
+
change_table :variants do |t|
|
4
|
+
t.decimal :weight, :precision => 8, :scale => 2
|
5
|
+
t.decimal :height, :precision => 8, :scale => 2
|
6
|
+
t.decimal :width, :precision => 8, :scale => 2
|
7
|
+
t.decimal :depth, :precision => 8, :scale => 2
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
def self.down
|
12
|
+
change_table :variants do |t|
|
13
|
+
t.remove :weight
|
14
|
+
t.remove :height
|
15
|
+
t.remove :width
|
16
|
+
t.remove :depth
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
ups_ground:
|
2
|
+
name: UPS Ground
|
3
|
+
zone: available_shipping
|
4
|
+
shipping_calculator: Spree::FlatRateShipping::Calculator
|
5
|
+
ups_two_day:
|
6
|
+
name: UPS Two Day
|
7
|
+
zone: available_shipping
|
8
|
+
shipping_calculator: Spree::FlatRateShipping::Calculator
|
9
|
+
ups_one_day:
|
10
|
+
name: UPS One Day
|
11
|
+
zone: available_shipping
|
12
|
+
shipping_calculator: Spree::FlatRateShipping::Calculator
|
@@ -0,0 +1,9 @@
|
|
1
|
+
ext_shipping_shipping_methods: Shipping Methods
|
2
|
+
ext_shipping_shipping_methods_description: Manage shipping methods
|
3
|
+
ext_shipping_calculator: Calculator
|
4
|
+
ext_shipping_new_shipping_method: New Shipping Method
|
5
|
+
ext_shipping_editing_shipping_method: Editing Shipping Method
|
6
|
+
ext_shipping_shipping_categories: Shipping Categories
|
7
|
+
ext_shipping_shipping_categories_description: Manage shipping categories to identify which products can be shipped via which method
|
8
|
+
ext_shipping_new_shipping_category: New Shipping Category
|
9
|
+
ext_shipping_editing_shipping_category: Editing Shipping Category
|
@@ -0,0 +1,37 @@
|
|
1
|
+
module Spree #:nodoc:
|
2
|
+
module ShippingCalculator
|
3
|
+
|
4
|
+
# modify the transitions in core - go to shipping after address (instead of cc payment)
|
5
|
+
Order.state_machines['state'].states << "shipment"
|
6
|
+
Order.state_machines['state'].events['next'].transitions.delete_if { |t| t.options[:to] == "creditcard_payment" && t.options[:from] == "address" }
|
7
|
+
Order.state_machines['state'].events['next'].transition(:to => 'shipment', :from => 'address')
|
8
|
+
Order.state_machines['state'].events['next'].transition(:to => 'creditcard_payment', :from => 'shipment')
|
9
|
+
Order.state_machines['state'].events['previous'].transition(:to => 'address', :from => 'shipment')
|
10
|
+
Order.state_machines['state'].after_transition :to => 'shipment', :do => :before_shipment
|
11
|
+
Order.state_machines['state'].events['edit'].transition(:to => 'in_progress', :from => 'shipment')
|
12
|
+
Order.state_machines['state'].after_transition(:to => 'shipment', :do => lambda {|order| order.update_attribute(:tax_amount, order.calculate_tax)})
|
13
|
+
|
14
|
+
def shipping_methods
|
15
|
+
methods = ShippingMethod.all
|
16
|
+
methods.select { |method| method.zone.include?(address) }
|
17
|
+
end
|
18
|
+
|
19
|
+
# collection of available shipping countries
|
20
|
+
def shipping_countries
|
21
|
+
ShippingMethod.all.collect { |method| method.zone.country_list }.flatten.uniq.sort_by {|item| item.send 'name'}
|
22
|
+
end
|
23
|
+
|
24
|
+
private
|
25
|
+
def before_shipment
|
26
|
+
# skip this step if there are no shipping methods
|
27
|
+
update_attribute(:state, "creditcard_payment") if shipping_methods.empty?
|
28
|
+
# automatically calculate shipping if there is only a single shipping method
|
29
|
+
if shipping_methods.size == 1
|
30
|
+
self.shipments << Shipment.create(:order => self, :shipping_method => shipping_methods.first)
|
31
|
+
self.state = "creditcard_payment"
|
32
|
+
save
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
end
|
37
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
namespace :db do
|
2
|
+
desc "Bootstrap your database for Spree."
|
3
|
+
task :bootstrap => :environment do
|
4
|
+
# load initial database fixtures (in db/sample/*.yml) into the current environment's database
|
5
|
+
ActiveRecord::Base.establish_connection(RAILS_ENV.to_sym)
|
6
|
+
Dir.glob(File.join(ShippingExtension.root, "db", 'sample', '*.{yml,csv}')).each do |fixture_file|
|
7
|
+
Fixtures.create_fixtures("#{ShippingExtension.root}/db/sample", File.basename(fixture_file, '.*'))
|
8
|
+
end
|
9
|
+
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
namespace :spree do
|
14
|
+
namespace :extensions do
|
15
|
+
namespace :shipping do
|
16
|
+
desc "Copies public assets of the Shipping to the instance public/ directory."
|
17
|
+
task :update => :environment do
|
18
|
+
is_svn_or_dir = proc {|path| path =~ /\.svn/ || File.directory?(path) }
|
19
|
+
Dir[ShippingExtension.root + "/public/**/*"].reject(&is_svn_or_dir).each do |file|
|
20
|
+
path = file.sub(ShippingExtension.root, '')
|
21
|
+
directory = File.dirname(path)
|
22
|
+
puts "Copying #{path}..."
|
23
|
+
mkdir_p RAILS_ROOT + directory
|
24
|
+
cp file, RAILS_ROOT + path
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|