spree_delivery_options 2.1.9 → 2.1.10
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile +2 -1
- data/app/assets/javascripts/admin/delivery_time_options.js +56 -0
- data/app/assets/javascripts/admin/spree_delivery_options.js +2 -0
- data/app/assets/stylesheets/admin/delivery_options_form.scss +15 -0
- data/app/assets/stylesheets/admin/spree_delivery_options.css +1 -0
- data/app/controllers/spree/admin/orders/delivery_options_controller.rb +25 -0
- data/app/models/spree/order_decorator.rb +1 -1
- data/app/overrides/add_delivery_options_link_order_page.rb +5 -0
- data/app/views/spree/admin/orders/delivery_options/edit.haml +35 -0
- data/app/views/spree/admin/shared/_delivery_options_link.haml +3 -0
- data/config/routes.rb +4 -1
- data/lib/generators/spree_delivery_options/install/install_generator.rb +2 -1
- data/lib/spree_delivery_options/engine.rb +5 -1
- data/lib/spree_delivery_options.rb +2 -0
- data/spec/controllers/spree/admin/orders/delivery_options_controller_spec.rb +55 -0
- data/spec/models/order_spec.rb +12 -0
- data/spec/spec_helper.rb +1 -0
- data/spree_delivery_options.gemspec +3 -1
- metadata +25 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 000257197aa4e88e1516c66905ca43adc002d988
|
4
|
+
data.tar.gz: b5913ede5baedf31a6a47dae371eb5bf6a8b473a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e874be45553226c30884289810d0d03826cbfe2e5eaea382c14cd02fc3d6daf77b89b136eba270a0d635664d779deef728ade7944e8b78715da97d1328c5fc64
|
7
|
+
data.tar.gz: 1797709d7fe53097b81a8b256a70fb3cb975f2cd6c5287e216f0220529b3991d5b73b5b6c1f53f6fb86f01e18757134c91008577d8f55738837fed8fb2973849
|
data/Gemfile
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
source 'http://rubygems.org'
|
2
2
|
|
3
3
|
# Provides basic authentication functionality for testing parts of your engine
|
4
|
-
|
4
|
+
gem 'spree_auth_devise', :git => "git://github.com/spree/spree_auth_devise", :branch => '2-1-stable'
|
5
|
+
gem 'haml'
|
5
6
|
|
6
7
|
gemspec
|
@@ -0,0 +1,56 @@
|
|
1
|
+
function SpreeDeliveryOptions() {
|
2
|
+
|
3
|
+
var that = this;
|
4
|
+
|
5
|
+
this.initializeDeliveryTimeSelect = function() {
|
6
|
+
this.update_delivery_time_options();
|
7
|
+
|
8
|
+
$('#order_delivery_date').change(function(event){
|
9
|
+
that.update_delivery_time_options();
|
10
|
+
});
|
11
|
+
};
|
12
|
+
|
13
|
+
this.update_delivery_time_options = function() {
|
14
|
+
delivery_time_options = $.parseJSON($('.delivery-time-options').attr("data"));
|
15
|
+
|
16
|
+
if (delivery_time_options){
|
17
|
+
weekdays = ['sunday', 'monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday'];
|
18
|
+
|
19
|
+
var dateParts = []
|
20
|
+
if ($('#order_delivery_date').val().indexOf('/') !== -1) {
|
21
|
+
dateParts = $('#order_delivery_date').val().split('/')
|
22
|
+
} else {
|
23
|
+
dateParts = $('#order_delivery_date').val().split('-')
|
24
|
+
}
|
25
|
+
day_index = new Date(dateParts[0], dateParts[1]-1, dateParts[2]).getDay();
|
26
|
+
weekday = weekdays[day_index];
|
27
|
+
|
28
|
+
day_options = delivery_time_options[weekday];
|
29
|
+
this.populate_delivery_time(day_options);
|
30
|
+
}
|
31
|
+
};
|
32
|
+
|
33
|
+
this.populate_delivery_time = function(options) {
|
34
|
+
if (options) {
|
35
|
+
var selected_delivery_time = $('.selected-delivery-time').attr("data");
|
36
|
+
var arLen = options.length;
|
37
|
+
var newList = "";
|
38
|
+
for ( var i=0, len=arLen; i<len; ++i ){
|
39
|
+
if (options[i] == selected_delivery_time) {
|
40
|
+
newList = newList + '<option selected=true value="' + options[i] + '">' + options[i]+'</option>';
|
41
|
+
} else {
|
42
|
+
newList = newList + '<option value="' + options[i] + '">' + options[i]+'</option>';
|
43
|
+
}
|
44
|
+
}
|
45
|
+
$('#order_delivery_time').html(newList);
|
46
|
+
} else {
|
47
|
+
$('#order_delivery_time').html("<option>No deliveries available on this date</option>");
|
48
|
+
}
|
49
|
+
};
|
50
|
+
|
51
|
+
}
|
52
|
+
|
53
|
+
$(document).ready(function() {
|
54
|
+
var deliveryOptions = new SpreeDeliveryOptions();
|
55
|
+
deliveryOptions.initializeDeliveryTimeSelect();
|
56
|
+
});
|
@@ -0,0 +1,25 @@
|
|
1
|
+
module Spree
|
2
|
+
module Admin
|
3
|
+
module Orders
|
4
|
+
class DeliveryOptionsController < Spree::Admin::BaseController
|
5
|
+
|
6
|
+
def edit
|
7
|
+
@order = Order.find_by(number: params[:order_id])
|
8
|
+
end
|
9
|
+
|
10
|
+
def update
|
11
|
+
@order = Order.find_by(number: params[:order_id])
|
12
|
+
@order.update_attributes(delivery_options_params)
|
13
|
+
render :edit
|
14
|
+
end
|
15
|
+
|
16
|
+
private
|
17
|
+
|
18
|
+
def delivery_options_params
|
19
|
+
params.require(:order).permit(:delivery_date, :delivery_time, :delivery_instructions)
|
20
|
+
end
|
21
|
+
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -3,7 +3,7 @@ Spree::Order.class_eval do
|
|
3
3
|
require 'spree/order/checkout'
|
4
4
|
|
5
5
|
def valid_delivery_instructions?
|
6
|
-
if self.delivery_instructions.length > 500
|
6
|
+
if self.delivery_instructions && self.delivery_instructions.length > 500
|
7
7
|
self.errors[:delivery_instructions] << 'cannot be longer than 500 charachters'
|
8
8
|
return false
|
9
9
|
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
= render :partial => 'spree/admin/shared/order_tabs', :locals => { :current => 'Delivery Options' }
|
2
|
+
|
3
|
+
= csrf_meta_tags
|
4
|
+
|
5
|
+
- content_for :page_title do
|
6
|
+
%i.icon-arrow-right= Spree.t(:delivery_options)
|
7
|
+
|
8
|
+
- content_for :page_actions do
|
9
|
+
%li= button_link_to Spree.t(:back_to_orders_list), admin_orders_path, :icon => 'icon-arrow-left'
|
10
|
+
|
11
|
+
= render :partial => 'spree/shared/error_messages', :locals => { :target => @order }
|
12
|
+
|
13
|
+
#delivery-options-form
|
14
|
+
.delivery-time-options{data: SpreeDeliveryOptions::Config.delivery_time_options}
|
15
|
+
|
16
|
+
= form_for @order, :url => admin_order_delivery_options_url(@order) do |f|
|
17
|
+
%fieldset(data-hook="admin_delivery_options_form_fields" class="no-border-top")
|
18
|
+
%fieldset(class="index no-border-bottom")
|
19
|
+
%legend(align="center")= Spree.t(:delivery_options)
|
20
|
+
%div(data-hook="delivery_options_fields" class="row")
|
21
|
+
.alpha.twelve.columns
|
22
|
+
.field
|
23
|
+
= f.label :delivery_date, "Delivery Date"
|
24
|
+
= f.text_field :delivery_date, class: "datepicker"
|
25
|
+
.field
|
26
|
+
- selected_delivery_day = (@order.delivery_date || Date.today).strftime('%A').downcase
|
27
|
+
.selected-delivery-time{data: @order.delivery_time}
|
28
|
+
= f.label :delivery_time, "Delivery Time"
|
29
|
+
= f.select :delivery_time, JSON.parse(SpreeDeliveryOptions::Config.delivery_time_options)[selected_delivery_day]
|
30
|
+
.field
|
31
|
+
= f.label :delivery_instructions, "Delivery Instructions"
|
32
|
+
= f.text_area :delivery_instructions, class: 'fullwidth'
|
33
|
+
|
34
|
+
.form-buttons.filter-actions.actions
|
35
|
+
= button Spree.t('actions.update'), 'icon-refresh'
|
data/config/routes.rb
CHANGED
@@ -1,3 +1,6 @@
|
|
1
1
|
Spree::Core::Engine.routes.draw do
|
2
|
-
|
2
|
+
|
3
|
+
get "admin/orders/:order_id/delivery_options/", controller: 'admin/orders/delivery_options', action: 'edit', as: 'admin_order_delivery_options'
|
4
|
+
patch "admin/orders/:order_id/delivery_options/", controller: 'admin/orders/delivery_options', action: 'update'
|
5
|
+
|
3
6
|
end
|
@@ -2,8 +2,9 @@ module SpreeDeliveryOptions
|
|
2
2
|
module Generators
|
3
3
|
class InstallGenerator < Rails::Generators::Base
|
4
4
|
|
5
|
-
def add_javascripts
|
5
|
+
def add_javascripts
|
6
6
|
append_file 'app/assets/javascripts/store/all.js', "//= require store/spree_delivery_options\n"
|
7
|
+
append_file 'app/assets/javascripts/admin/all.js', "//= require admin/spree_delivery_options\n"
|
7
8
|
end
|
8
9
|
|
9
10
|
def add_stylesheets
|
@@ -1,6 +1,7 @@
|
|
1
1
|
module SpreeDeliveryOptions
|
2
2
|
class Engine < Rails::Engine
|
3
3
|
require 'spree/core'
|
4
|
+
|
4
5
|
isolate_namespace Spree
|
5
6
|
|
6
7
|
initializer "spree.spree_delivery_options.preferences", :after => "spree.environment" do |app|
|
@@ -17,7 +18,10 @@ module SpreeDeliveryOptions
|
|
17
18
|
end
|
18
19
|
|
19
20
|
def self.activate
|
20
|
-
Dir.glob(File.join(File.dirname(__FILE__), '../../app
|
21
|
+
Dir.glob(File.join(File.dirname(__FILE__), '../../app/controllers/**/*.rb')) do |c|
|
22
|
+
Rails.configuration.cache_classes ? require(c) : load(c)
|
23
|
+
end
|
24
|
+
Dir.glob(File.join(File.dirname(__FILE__), '../../app/**/*decorator*.rb')) do |c|
|
21
25
|
Rails.configuration.cache_classes ? require(c) : load(c)
|
22
26
|
end
|
23
27
|
end
|
@@ -0,0 +1,55 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Spree::Admin::Orders::DeliveryOptionsController do
|
4
|
+
|
5
|
+
let(:user) { mock_model Spree::User, :last_incomplete_spree_order => nil, :has_spree_role? => true, :spree_api_key => 'fake' }
|
6
|
+
|
7
|
+
before :each do
|
8
|
+
controller.stub :spree_current_user => user
|
9
|
+
controller.stub :check_authorization
|
10
|
+
end
|
11
|
+
|
12
|
+
describe 'edit' do
|
13
|
+
|
14
|
+
it 'should render edit' do
|
15
|
+
spree_get :edit
|
16
|
+
response.should render_template(:edit)
|
17
|
+
end
|
18
|
+
|
19
|
+
end
|
20
|
+
|
21
|
+
describe 'update' do
|
22
|
+
|
23
|
+
let(:order){Spree::Order.new}
|
24
|
+
let(:tomorrow){Date.tomorrow.strftime("%d/%m/%Y")}
|
25
|
+
|
26
|
+
before :each do
|
27
|
+
Spree::Order.stub(:find_by).and_return(order)
|
28
|
+
order.stub(:update_attributes).and_return(true)
|
29
|
+
end
|
30
|
+
|
31
|
+
it 'should update order' do
|
32
|
+
order.should_receive(:update_attributes).with({"delivery_date" => tomorrow})
|
33
|
+
|
34
|
+
spree_post :update, order: {delivery_date: tomorrow}
|
35
|
+
end
|
36
|
+
|
37
|
+
it 'should render edit when successful' do
|
38
|
+
spree_post :update, order: {delivery_date: tomorrow}
|
39
|
+
response.should render_template(:edit)
|
40
|
+
end
|
41
|
+
|
42
|
+
it 'should render edit when unsuccessful' do
|
43
|
+
order.should_receive(:update_attributes).with({"delivery_date" => tomorrow}).and_return false
|
44
|
+
spree_post :update, order: {delivery_date: tomorrow}
|
45
|
+
response.should render_template(:edit)
|
46
|
+
end
|
47
|
+
|
48
|
+
it 'should not allow to update invalid attributes' do
|
49
|
+
order.should_receive(:update_attributes).with({"delivery_date" => tomorrow})
|
50
|
+
spree_post :update, order: {delivery_date: tomorrow, crazy: 'blah'}
|
51
|
+
end
|
52
|
+
|
53
|
+
end
|
54
|
+
|
55
|
+
end
|
data/spec/models/order_spec.rb
CHANGED
@@ -10,6 +10,18 @@ describe Spree::Order do
|
|
10
10
|
|
11
11
|
describe 'delivery instructions' do
|
12
12
|
|
13
|
+
it 'should accept nil delivery instructions' do
|
14
|
+
order.delivery_instructions = nil
|
15
|
+
order.valid_delivery_instructions?.should be_true
|
16
|
+
order.errors[:delivery_instructions].should be_empty
|
17
|
+
end
|
18
|
+
|
19
|
+
it 'should accept empty delivery instructions' do
|
20
|
+
order.delivery_instructions = ""
|
21
|
+
order.valid_delivery_instructions?.should be_true
|
22
|
+
order.errors[:delivery_instructions].should be_empty
|
23
|
+
end
|
24
|
+
|
13
25
|
it 'should accept valid delivery instructions' do
|
14
26
|
order.delivery_instructions = "This is awesome"
|
15
27
|
order.valid_delivery_instructions?.should be_true
|
data/spec/spec_helper.rb
CHANGED
@@ -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.
|
5
|
+
s.version = '2.1.10'
|
6
6
|
s.summary = 'Adds delivery date and time during checkout'
|
7
7
|
s.description = ''
|
8
8
|
s.required_ruby_version = '>= 2.0.0'
|
@@ -17,6 +17,8 @@ Gem::Specification.new do |s|
|
|
17
17
|
|
18
18
|
s.add_dependency 'spree_core', '~> 2.1.3'
|
19
19
|
|
20
|
+
s.add_runtime_dependency 'haml'
|
21
|
+
|
20
22
|
s.add_development_dependency 'capybara', '~> 2.1'
|
21
23
|
s.add_development_dependency 'coffee-rails'
|
22
24
|
s.add_development_dependency 'database_cleaner'
|
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.
|
4
|
+
version: 2.1.10
|
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-
|
11
|
+
date: 2014-02-14 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: spree_core
|
@@ -24,6 +24,20 @@ dependencies:
|
|
24
24
|
- - ~>
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: 2.1.3
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: haml
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - '>='
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - '>='
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
27
41
|
- !ruby/object:Gem::Dependency
|
28
42
|
name: capybara
|
29
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -205,16 +219,21 @@ files:
|
|
205
219
|
- app/assets/images/store/ui-icons_666666_256x240.png
|
206
220
|
- app/assets/images/store/ui-icons_ff0084_256x240.png
|
207
221
|
- app/assets/images/store/ui-icons_ffffff_256x240.png
|
222
|
+
- app/assets/javascripts/admin/delivery_time_options.js
|
223
|
+
- app/assets/javascripts/admin/spree_delivery_options.js
|
208
224
|
- app/assets/javascripts/store/delivery_time_options.js
|
209
225
|
- app/assets/javascripts/store/jquery-ui-1.10.4.custom.js
|
210
226
|
- app/assets/javascripts/store/spree_delivery_options.js
|
227
|
+
- app/assets/stylesheets/admin/delivery_options_form.scss
|
211
228
|
- app/assets/stylesheets/admin/order_details.scss
|
212
229
|
- app/assets/stylesheets/admin/spree_delivery_options.css
|
213
230
|
- app/assets/stylesheets/store/delivery_checkout.scss
|
214
231
|
- app/assets/stylesheets/store/jquery-ui-1.10.4.custom.css
|
215
232
|
- app/assets/stylesheets/store/spree_delivery_options.css
|
233
|
+
- app/controllers/spree/admin/orders/delivery_options_controller.rb
|
216
234
|
- app/models/spree/order_decorator.rb
|
217
235
|
- app/overrides/add_delivery_info_to_order_details.rb
|
236
|
+
- app/overrides/add_delivery_options_link_order_page.rb
|
218
237
|
- app/overrides/admin_order_information.rb
|
219
238
|
- app/overrides/admin_orders_delivery_date_column.rb
|
220
239
|
- app/overrides/admin_orders_delivery_date_filter.rb
|
@@ -224,7 +243,9 @@ files:
|
|
224
243
|
- app/views/spree/admin/orders/_delivery_date_filter.html.erb
|
225
244
|
- app/views/spree/admin/orders/_delivery_date_header.html.erb
|
226
245
|
- app/views/spree/admin/orders/_delivery_info.haml
|
246
|
+
- app/views/spree/admin/orders/delivery_options/edit.haml
|
227
247
|
- app/views/spree/admin/shared/_admin_order_information_delivery_date.html.erb
|
248
|
+
- app/views/spree/admin/shared/_delivery_options_link.haml
|
228
249
|
- app/views/spree/checkout/_delivery_date.haml
|
229
250
|
- app/views/spree/orders/_order_delivery_date_details.html.erb
|
230
251
|
- config/locales/en.yml
|
@@ -237,6 +258,7 @@ files:
|
|
237
258
|
- lib/spree_delivery_options/configuration.rb
|
238
259
|
- lib/spree_delivery_options/engine.rb
|
239
260
|
- script/rails
|
261
|
+
- spec/controllers/spree/admin/orders/delivery_options_controller_spec.rb
|
240
262
|
- spec/models/order_spec.rb
|
241
263
|
- spec/spec_helper.rb
|
242
264
|
- spree_delivery_options.gemspec
|
@@ -265,5 +287,6 @@ signing_key:
|
|
265
287
|
specification_version: 4
|
266
288
|
summary: Adds delivery date and time during checkout
|
267
289
|
test_files:
|
290
|
+
- spec/controllers/spree/admin/orders/delivery_options_controller_spec.rb
|
268
291
|
- spec/models/order_spec.rb
|
269
292
|
- spec/spec_helper.rb
|