spree_delivery_options 2.1.15 → 2.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: c2eb54e36ae6b539d55955a467ef7e86ffb8af66
4
- data.tar.gz: 61f422e99c631a7aa68b5dccd6cdde06630b86e5
3
+ metadata.gz: b19936a62b8807116a557c91212c3d2b0ec4cdc2
4
+ data.tar.gz: 5bc39846c2a6cdd32fe656807b1752ed6f3cd479
5
5
  SHA512:
6
- metadata.gz: b83c9fd7738ded9a7dcfc8c0408845a3f8ba943a2edf6a6ccad71748bb63dd7281d437f23d8f78f3f4a2065343f8ca9c979133cd7f3a1c03822bcae9aeb955b6
7
- data.tar.gz: 6f9e9e7b63c452b54168636945b3a2206fa539f4470f062ec8e1f74852700fd4785e9b11da2dda48e94b492d9f65f8f42784f54a73a77a4d4bc91e9642235fd4
6
+ metadata.gz: af672b3f1e226c927e773dfc2c01c063102ab080e0072149c97ee2f482ce1d4e35027336f886d16e681e76c52f7dc735a7739407bc7458e08f29815521016e13
7
+ data.tar.gz: e4ea617a6d6e621577cf8bf2d01068f8e314cc616df90491a09835f504178a8f8e7327d478125b816843d70214fae0104a211a60605f3aec03b690dde2d7d145
@@ -0,0 +1,43 @@
1
+ function SpreeDeliveryOptionsForm() {
2
+
3
+ var that = this;
4
+
5
+ this.initializeForm = function() {
6
+ var formUrl = $('#delivery-options-form').attr('action');
7
+
8
+ $("#delivery-options-form input[type='submit']").click(function(event){
9
+ event.preventDefault();
10
+
11
+ var formData = $('#delivery-options-form').serialize();
12
+ $.post(
13
+ formUrl,
14
+ formData,
15
+ function(data) {
16
+ if (data.delivery_date !== null) {
17
+ location.reload();
18
+ } else {
19
+ that.showErrorMessage("Please enter a valid date.");
20
+ }
21
+ }).fail(function(data){
22
+ if (data.responseJSON.errors.delivery_date !== undefined) {
23
+ that.showErrorMessage(data.responseJSON.errors.delivery_date[0]);
24
+ } else if (data.responseJSON.errors.delivery_time !== undefined) {
25
+ that.showErrorMessage(data.responseJSON.errors.delivery_time[0]);
26
+ } else {
27
+ that.showErrorMessage("We could not update the delivery date. Please try at checkout.");
28
+ }
29
+ });
30
+ });
31
+ };
32
+
33
+ this.showErrorMessage = function(message) {
34
+ $('#delivery-options-homepage .error').html("<h5>" + message + "</h5>");
35
+ $('#delivery-options-homepage .error').show();
36
+ };
37
+
38
+ }
39
+
40
+ $(document).ready(function() {
41
+ var deliveryOptionsForm = new SpreeDeliveryOptionsForm();
42
+ deliveryOptionsForm.initializeForm();
43
+ });
@@ -3,7 +3,10 @@ function SpreeDeliveryOptions() {
3
3
  var that = this;
4
4
 
5
5
  this.initializeDatePicker = function() {
6
- $('#order_delivery_date').datepicker({dateFormat: "dd/mm/yy"});
6
+ $('#order_delivery_date').datepicker({
7
+ dateFormat: "dd/mm/yy",
8
+ minDate: 1
9
+ });
7
10
  };
8
11
 
9
12
  this.initializeDeliveryTimeSelect = function() {
@@ -41,11 +44,11 @@ function SpreeDeliveryOptions() {
41
44
  var arLen = options.length;
42
45
  var newList = "";
43
46
  for ( var i=0, len=arLen; i<len; ++i ){
44
- newList = newList + '<option>' + options[i]+'</option>';
47
+ newList = newList + "<option value='" + options[i] + "'>" + options[i]+'</option>';
45
48
  }
46
49
  $('#order_delivery_time').html(newList);
47
50
  } else {
48
- $('#order_delivery_time').html("<option>No deliveries available on this date</option>");
51
+ $('#order_delivery_time').html("<option>Not available</option>");
49
52
  }
50
53
  };
51
54
 
@@ -1,3 +1,4 @@
1
1
  //= require jquery
2
2
  //= require store/delivery_time_options
3
+ //= require store/delivery_options_form
3
4
  //= require store/jquery-ui-1.10.4.custom
@@ -0,0 +1,40 @@
1
+ #delivery-options-homepage {
2
+ background-color: #ccc;
3
+ padding: 10px;
4
+ margin-bottom: 10px;
5
+
6
+ .row {
7
+ margin-bottom: 0;
8
+ }
9
+
10
+ .success {
11
+ p {
12
+ margin: 0;
13
+ padding: 5px 0;
14
+ }
15
+ }
16
+
17
+ .error h5 {
18
+ color: red;
19
+ }
20
+
21
+ .field {
22
+
23
+ display: block;
24
+ margin-bottom: 5px;
25
+
26
+ label {
27
+ margin-right: 5px;
28
+ }
29
+
30
+ input[type='text'], select {
31
+ width: 120px;
32
+ }
33
+
34
+ input[type='submit'] {
35
+ margin-top: 5px;
36
+ width: 200px;
37
+ }
38
+
39
+ }
40
+ }
@@ -1,5 +1,6 @@
1
1
  /*
2
2
  *= require store/spree_frontend
3
3
  *= require store/delivery_checkout
4
+ *= require store/delivery_options_homepage
4
5
  *= require store/jquery-ui-1.10.4.custom.css
5
6
  */
@@ -0,0 +1,3 @@
1
+ Spree::TaxonsController.class_eval do
2
+ helper 'spree_delivery_options/base'
3
+ end
@@ -1,6 +1,14 @@
1
1
  module SpreeDeliveryOptions
2
2
  module BaseHelper
3
3
 
4
+ def current_order_cutoff_time
5
+ return nil unless (current_order && current_order.delivery_date)
6
+
7
+ cutoff_time = Time.zone.now.change(hour: SpreeDeliveryOptions::Config.delivery_cut_off_hour)
8
+ cutoff_date = current_order.delivery_date - 1.day
9
+ "#{cutoff_date.strftime('%A, %d %b')} before #{cutoff_time.strftime("%l%P")}"
10
+ end
11
+
4
12
  def next_delivery_slot
5
13
  delivery_options = JSON.parse(SpreeDeliveryOptions::Config.delivery_time_options)
6
14
 
@@ -13,9 +21,9 @@ module SpreeDeliveryOptions
13
21
  def next_delivery_day
14
22
  delivery_options = JSON.parse(SpreeDeliveryOptions::Config.delivery_time_options)
15
23
 
16
- cutoff_time = Time.now.change(hour: SpreeDeliveryOptions::Config.delivery_cut_off_hour)
24
+ cutoff_time = Time.zone.now.change(hour: SpreeDeliveryOptions::Config.delivery_cut_off_hour)
17
25
 
18
- current_day = Time.now > cutoff_time ? (Date.today + 2.days) : Date.tomorrow
26
+ current_day = Time.zone.now > cutoff_time ? (Date.current + 2.days) : (Date.current + 1.day)
19
27
  next_available_day = nil
20
28
  counter = 0
21
29
 
@@ -2,6 +2,9 @@ Spree::Order.class_eval do
2
2
  require 'date'
3
3
  require 'spree/order/checkout'
4
4
 
5
+ validate :valid_delivery_date?
6
+ validate :valid_delivery_time?
7
+
5
8
  def valid_delivery_instructions?
6
9
  if self.delivery_instructions && self.delivery_instructions.length > 500
7
10
  self.errors[:delivery_instructions] << 'cannot be longer than 500 charachters'
@@ -10,20 +13,22 @@ Spree::Order.class_eval do
10
13
  true
11
14
  end
12
15
 
13
- def valid_delivery_date?
14
-
16
+ def delivery_date_present?
15
17
  self.errors[:delivery_date] << 'cannot be blank' unless self.delivery_date
18
+ self.errors[:delivery_date].empty? ? true : false
19
+ end
16
20
 
21
+ def valid_delivery_date?
17
22
  if self.delivery_date
18
- self.errors[:delivery_date] << 'cannot be today or in the past' if self.delivery_date <= Date.today
23
+ self.errors[:delivery_date] << 'cannot be today or in the past' if self.delivery_date <= Date.current
19
24
 
20
25
  options = delivery_time_options(self.delivery_date)
21
26
  unless options
22
27
  self.errors[:delivery_date] << "is not available on the selected week day."
23
28
  end
24
29
 
25
- cutoff_time = Time.now.change(hour: SpreeDeliveryOptions::Config.delivery_cut_off_hour)
26
- if self.delivery_date == Date.tomorrow && Time.now > (cutoff_time + 15.minutes)
30
+ cutoff_time = Time.zone.now.change(hour: SpreeDeliveryOptions::Config.delivery_cut_off_hour)
31
+ if self.delivery_date == (Date.current + 1.day) && Time.zone.now > (cutoff_time + 15.minutes)
27
32
  self.errors[:delivery_date] << "cannot be tomorrow if the order is created after 1pm"
28
33
  end
29
34
  end
@@ -31,6 +36,11 @@ Spree::Order.class_eval do
31
36
  self.errors[:delivery_date].empty? ? true : false
32
37
  end
33
38
 
39
+ def delivery_time_present?
40
+ self.errors[:delivery_time] << 'cannot be blank' unless self.delivery_time
41
+ self.errors[:delivery_time].empty? ? true : false
42
+ end
43
+
34
44
  def valid_delivery_time?
35
45
  return unless self.delivery_date
36
46
 
@@ -64,6 +74,10 @@ Spree::PermittedAttributes.checkout_attributes << :delivery_time
64
74
  Spree::PermittedAttributes.checkout_attributes << :delivery_instructions
65
75
 
66
76
  Spree::Order.state_machine.before_transition :to => :payment, :do => :valid_delivery_instructions?
77
+
78
+ Spree::Order.state_machine.before_transition :to => :payment, :do => :delivery_date_present?
67
79
  Spree::Order.state_machine.before_transition :to => :payment, :do => :valid_delivery_date?
80
+
81
+ Spree::Order.state_machine.before_transition :to => :payment, :do => :delivery_time_present?
68
82
  Spree::Order.state_machine.before_transition :to => :payment, :do => :valid_delivery_time?
69
83
 
@@ -0,0 +1,5 @@
1
+ Deface::Override.new(:virtual_path => "spree/taxons/show",
2
+ :name => "add_delivery_options_to_taxon",
3
+ :insert_before => "h1.taxon-title",
4
+ :partial => "spree/taxons/delivery_options",
5
+ :disabled => false)
@@ -0,0 +1,29 @@
1
+ #delivery-options-homepage
2
+ - order = current_order(true)
3
+ - if order.delivery_date? && order.delivery_time
4
+ .row.success
5
+ .columns.sixteen.alpha.omega
6
+ %h5
7
+ = "Thanks! Your order is scheduled for #{order.delivery_date.strftime('%A, %d %b')} from #{order.delivery_time}."
8
+ = " You just need to complete it by #{current_order_cutoff_time}"
9
+ %p
10
+ You can still change it at the checkout if needed.
11
+ - else
12
+ .row.form
13
+ .columns.seven.alpha
14
+ %h3 Want to know when you're getting your groceries?
15
+ %h5 Choose your delivery time and get it sorted now
16
+ .columns.four
17
+ = form_for order, {url: api_order_url(order), html: {id: 'delivery-options-form'}} do |form|
18
+ = hidden_field_tag 'order_token', order.token
19
+ .field
20
+ = form.label :delivery_date, "Delivery Date"
21
+ = form.text_field :delivery_date, value: (l(order.delivery_date) rescue l(Date.current))
22
+ .field
23
+ = form.label :delivery_time, "Delivery Time"
24
+ = form.select :delivery_time, JSON.parse(SpreeDeliveryOptions::Config.delivery_time_options)["monday"]
25
+ .field
26
+ = form.submit "Set Delivery Time"
27
+ .delivery-time-options{data: SpreeDeliveryOptions::Config.delivery_time_options}
28
+ .columns.four.omega
29
+ .error.hide
@@ -2,6 +2,36 @@ require 'spec_helper'
2
2
 
3
3
  describe SpreeDeliveryOptions::BaseHelper do
4
4
 
5
+ describe 'current order cutoff time' do
6
+
7
+ let(:order){FactoryGirl.build(:order)}
8
+
9
+ before :each do
10
+ helper.stub(:current_order).and_return(order)
11
+ end
12
+
13
+ it 'should return nil if there is no current order' do
14
+ helper.stub(:current_order).and_return(nil)
15
+ helper.current_order_cutoff_time.should be_nil
16
+ end
17
+
18
+ it 'should return nil if there current order has no delivery date' do
19
+ order.delivery_date = nil
20
+ helper.current_order_cutoff_time.should be_nil
21
+ end
22
+
23
+ it 'should return the day before if delivery date is set' do
24
+ SpreeDeliveryOptions::Config.delivery_cut_off_hour = 12
25
+ order.delivery_date = Date.parse('23/04/2014')
26
+
27
+ time_now = DateTime.parse("20/03/2013")
28
+ Timecop.freeze(time_now)
29
+ helper.current_order_cutoff_time.should == 'Tuesday, 22 Apr before 12pm'
30
+ Timecop.return
31
+ end
32
+
33
+ end
34
+
5
35
  describe 'next delivery slot' do
6
36
 
7
37
  it 'should return first slot for tomorrow if its before cutoff time' do
@@ -8,7 +8,7 @@ describe Spree::Order do
8
8
  SpreeDeliveryOptions::Config.delivery_time_options = {monday: ['Between 6-7am']}.to_json
9
9
  end
10
10
 
11
- describe 'delivery instructions' do
11
+ describe 'valid_delivery_instructions' do
12
12
 
13
13
  it 'should accept nil delivery instructions' do
14
14
  order.delivery_instructions = nil
@@ -36,100 +36,101 @@ describe Spree::Order do
36
36
 
37
37
  end
38
38
 
39
- describe "delivery options" do
39
+ describe "delivery_date_present" do
40
40
 
41
- describe "basic validations" do
42
-
43
- it 'should require delivery date' do
44
- order.valid_delivery_date?.should == false
45
- order.errors[:delivery_date].should_not be_empty
46
- end
41
+ it 'should require delivery date' do
42
+ order.delivery_date_present?.should == false
43
+ order.errors[:delivery_date].should_not be_empty
44
+ end
47
45
 
48
- it 'should require delivery time' do
49
- order.delivery_date = Date.today
46
+ end
50
47
 
51
- order.valid_delivery_time?.should == false
52
- order.errors[:delivery_time].should_not be_empty
53
- end
48
+ describe "valid_delivery_date" do
54
49
 
55
- it 'should require a valid option for delivery time' do
56
- order.delivery_date = Date.today
50
+ before :each do
51
+ SpreeDeliveryOptions::Config.delivery_time_options = {monday: ['Between 6-7am']}.to_json
52
+ end
57
53
 
58
- order.delivery_time = 'crazy times!'
59
- order.valid_delivery_time?.should == false
60
- order.errors[:delivery_time].should_not be_empty
61
- end
62
54
 
55
+ it 'should not be valid if delivery date is in the past' do
56
+ order.delivery_date = Date.yesterday
57
+ order.valid_delivery_date?.should == false
58
+ order.errors[:delivery_date].should_not be_empty
63
59
  end
64
60
 
65
- describe "validating the cut off hour" do
61
+ it 'should not be valid if delivery date is today' do
62
+ order.delivery_date = Date.today
63
+ order.valid_delivery_date?.should == false
64
+ order.errors[:delivery_date].should_not be_empty
65
+ end
66
66
 
67
- before :each do
68
- SpreeDeliveryOptions::Config.delivery_time_options = {monday: ['Between 6-7am']}.to_json
69
- end
67
+ it 'should be valid if delivery date is tomorrow and it is past the cutoff time by less than 15 min' do
68
+ time_now = DateTime.parse("17/11/2013 #{SpreeDeliveryOptions::Config.delivery_cut_off_hour}:14 +1100")
69
+ Timecop.freeze(time_now)
70
70
 
71
- it 'should not be valid if delivery date is in the past' do
72
- order.delivery_date = Date.yesterday
73
- order.valid_delivery_date?.should == false
74
- order.errors[:delivery_date].should_not be_empty
75
- end
71
+ order.delivery_date = '18/11/2013'
72
+ order.valid_delivery_date?.should == true
73
+ order.errors[:delivery_date].should be_empty
74
+ Timecop.return
75
+ end
76
76
 
77
- it 'should not be valid if delivery date is today' do
78
- order.delivery_date = Date.today
79
- order.valid_delivery_date?.should == false
80
- order.errors[:delivery_date].should_not be_empty
81
- end
77
+ it 'should not be valid if delivery date is tomorrow and it is past the cutoff time + 15 min' do
78
+ time_now = DateTime.parse("17/11/2013 #{SpreeDeliveryOptions::Config.delivery_cut_off_hour}:16 +1100")
79
+ Timecop.freeze(time_now)
82
80
 
83
- it 'should be valid if delivery date is tomorrow and it is past the cutoff time by less than 15 min' do
84
- time_now = DateTime.parse("17/11/2013 #{SpreeDeliveryOptions::Config.delivery_cut_off_hour}:14 +1100")
85
- Timecop.freeze(time_now)
81
+ order.delivery_date = '18/11/2013'
82
+ order.valid_delivery_date?.should == false
83
+ order.errors[:delivery_date].should_not be_empty
84
+ Timecop.return
85
+ end
86
86
 
87
- order.delivery_date = '18/11/2013'
88
- order.valid_delivery_date?.should == true
89
- order.errors[:delivery_date].should be_empty
90
- Timecop.return
91
- end
87
+ it 'should be valid if delivery date is tomorrow but is before the cutoff time' do
88
+ time_now = DateTime.parse("17/11/2013 #{SpreeDeliveryOptions::Config.delivery_cut_off_hour-1}:59 +1100")
89
+ Timecop.freeze(time_now)
92
90
 
93
- it 'should not be valid if delivery date is tomorrow and it is past the cutoff time + 15 min' do
94
- time_now = DateTime.parse("17/11/2013 #{SpreeDeliveryOptions::Config.delivery_cut_off_hour}:16 +1100")
95
- Timecop.freeze(time_now)
91
+ order.delivery_date = '18/11/2013'
92
+ order.valid_delivery_date?
93
+ order.errors[:delivery_date].should be_empty
94
+ Timecop.return
95
+ end
96
96
 
97
- order.delivery_date = '18/11/2013'
98
- order.valid_delivery_date?.should == false
99
- order.errors[:delivery_date].should_not be_empty
100
- Timecop.return
101
- end
97
+ end
102
98
 
103
- it 'should be valid if delivery date is tomorrow but is before the cutoff time' do
104
- time_now = DateTime.parse("17/11/2013 #{SpreeDeliveryOptions::Config.delivery_cut_off_hour-1}:59 +1100")
105
- Timecop.freeze(time_now)
99
+ describe 'delivery_time_present' do
106
100
 
107
- order.delivery_date = '18/11/2013'
108
- order.valid_delivery_date?
109
- order.errors[:delivery_date].should be_empty
110
- Timecop.return
111
- end
101
+ it 'should require delivery time' do
102
+ order.delivery_date = Date.today
112
103
 
104
+ order.delivery_time_present?.should == false
105
+ order.errors[:delivery_time].should_not be_empty
113
106
  end
114
107
 
115
- describe "validating the week day" do
108
+ end
109
+
110
+ describe 'valid_delivery_time' do
116
111
 
117
- before :each do
118
- SpreeDeliveryOptions::Config.delivery_time_options = {monday: ['Between 6-7am']}.to_json
119
- end
112
+ before :each do
113
+ SpreeDeliveryOptions::Config.delivery_time_options = {monday: ['Between 6-7am']}.to_json
114
+ end
120
115
 
121
- it 'should allow delivery time to be in a valid delivery day' do
122
- order.delivery_date = DateTime.now.next_week.next_day(0)
123
- order.valid_delivery_date?#.should == true
124
- order.errors[:delivery_date].should be_empty
125
- end
116
+ it 'should require a valid option for delivery time' do
117
+ order.delivery_date = Date.today
126
118
 
127
- it 'should not allow delivery time to be in a non delivery day' do
128
- order.delivery_date = DateTime.now.next_week.next_day(1)
129
- order.valid_delivery_date?.should == false
130
- order.errors[:delivery_date].should_not be_empty
131
- end
119
+ order.delivery_time = 'crazy times!'
120
+ order.valid_delivery_time?.should == false
121
+ order.errors[:delivery_time].should_not be_empty
122
+ end
132
123
 
124
+ it 'should allow delivery time to be in a valid delivery day' do
125
+ order.delivery_date = DateTime.now.next_week.next_day(0)
126
+ order.valid_delivery_date?#.should == true
127
+ order.errors[:delivery_date].should be_empty
128
+ end
129
+
130
+ it 'should not allow delivery time to be in a non delivery day' do
131
+ order.delivery_date = DateTime.now.next_week.next_day(1)
132
+ order.valid_delivery_date?.should == false
133
+ order.errors[:delivery_date].should_not be_empty
133
134
  end
134
135
 
135
136
  describe "overriding delivery day with specific date" do
@@ -178,5 +179,4 @@ describe Spree::Order do
178
179
 
179
180
  end
180
181
 
181
-
182
182
  end
@@ -2,7 +2,7 @@
2
2
  Gem::Specification.new do |s|
3
3
  s.platform = Gem::Platform::RUBY
4
4
  s.name = 'spree_delivery_options'
5
- s.version = '2.1.15'
5
+ s.version = '2.2.0'
6
6
  s.summary = 'Adds delivery date and time during checkout'
7
7
  s.description = ''
8
8
  s.required_ruby_version = '>= 2.0.0'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: spree_delivery_options
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.1.15
4
+ version: 2.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Francisco Trindade
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-03-14 00:00:00.000000000 Z
11
+ date: 2014-03-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: spree_core
@@ -221,6 +221,7 @@ files:
221
221
  - app/assets/images/store/ui-icons_ffffff_256x240.png
222
222
  - app/assets/javascripts/admin/delivery_time_options.js
223
223
  - app/assets/javascripts/admin/spree_delivery_options.js
224
+ - app/assets/javascripts/store/delivery_options_form.js
224
225
  - app/assets/javascripts/store/delivery_time_options.js
225
226
  - app/assets/javascripts/store/jquery-ui-1.10.4.custom.js
226
227
  - app/assets/javascripts/store/spree_delivery_options.js
@@ -228,14 +229,17 @@ files:
228
229
  - app/assets/stylesheets/admin/order_details.scss
229
230
  - app/assets/stylesheets/admin/spree_delivery_options.css
230
231
  - app/assets/stylesheets/store/delivery_checkout.scss
232
+ - app/assets/stylesheets/store/delivery_options_homepage.scss
231
233
  - app/assets/stylesheets/store/jquery-ui-1.10.4.custom.css
232
234
  - app/assets/stylesheets/store/spree_delivery_options.css
233
235
  - app/controllers/spree/admin/orders/delivery_options_controller.rb
236
+ - app/controllers/spree/taxons_controller_decorator.rb
234
237
  - app/helpers/spree/application_helper_decorator.rb
235
238
  - app/helpers/spree_delivery_options/base_helper.rb
236
239
  - app/models/spree/order_decorator.rb
237
240
  - app/overrides/add_delivery_info_to_order_details.rb
238
241
  - app/overrides/add_delivery_options_link_order_page.rb
242
+ - app/overrides/add_delivery_options_to_taxon.rb
239
243
  - app/overrides/admin_order_information.rb
240
244
  - app/overrides/admin_orders_delivery_date_column.rb
241
245
  - app/overrides/admin_orders_delivery_date_filter.rb
@@ -250,6 +254,7 @@ files:
250
254
  - app/views/spree/admin/shared/_delivery_options_link.haml
251
255
  - app/views/spree/checkout/_delivery_date.haml
252
256
  - app/views/spree/orders/_order_delivery_date_details.html.erb
257
+ - app/views/spree/taxons/_delivery_options.haml
253
258
  - config/locales/en.yml
254
259
  - config/routes.rb
255
260
  - db/migrate/20130415025010_add_delivery_date_to_orders.rb