spree_wallet 2.1.1 → 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.
- data/README.md +11 -20
- data/app/controllers/spree/checkout_controller_decorator.rb +1 -26
- data/app/models/spree/order_decorator.rb +64 -0
- data/app/views/spree/admin/store_credits/new.html.erb +3 -3
- data/app/views/spree/checkout/_payment.html.erb +43 -11
- data/db/migrate/20130729071647_add_lock_version_to_spree_users.rb +1 -1
- data/lib/generators/spree_wallet/install/install_generator.rb +1 -1
- metadata +8 -8
data/README.md
CHANGED
@@ -7,13 +7,19 @@ Installation
|
|
7
7
|
Add spree_wallet to your Gemfile:
|
8
8
|
|
9
9
|
```ruby
|
10
|
-
gem 'spree_wallet'
|
10
|
+
gem 'spree_wallet'
|
11
11
|
```
|
12
12
|
|
13
|
-
But if you are using
|
13
|
+
But if you are using older version of spree
|
14
14
|
|
15
15
|
```ruby
|
16
|
-
|
16
|
+
# Spree 2.1.x
|
17
|
+
gem 'spree_wallet', '2.1.0'
|
18
|
+
```
|
19
|
+
|
20
|
+
```ruby
|
21
|
+
# Spree 2.0.x
|
22
|
+
gem 'spree_wallet', '2.0.6'
|
17
23
|
```
|
18
24
|
|
19
25
|
Bundle your dependencies and run the installation generator:
|
@@ -36,28 +42,13 @@ Testing
|
|
36
42
|
|
37
43
|
You need to do a quick one-time creation of a test application and then you can use it to run the tests.
|
38
44
|
|
39
|
-
|
40
|
-
bundle exec rake test_app
|
41
|
-
```
|
45
|
+
bundle exec rake test_app
|
42
46
|
|
43
47
|
Then run the rspec tests with mysql.
|
44
48
|
|
45
|
-
|
46
|
-
bundle exec rspec .
|
47
|
-
```
|
48
|
-
|
49
|
+
bundle exec rspec .
|
49
50
|
|
50
51
|
|
51
|
-
Contributing
|
52
|
-
------------
|
53
|
-
|
54
|
-
1. Fork the repo.
|
55
|
-
2. Clone your repo.
|
56
|
-
3. Run `bundle install`.
|
57
|
-
4. Run `bundle exec rake test_app` to create the test application in `spec/test_app`.
|
58
|
-
5. Make your changes.
|
59
|
-
6. Ensure specs pass by running `bundle exec rspec spec`.
|
60
|
-
7. Submit your pull request.
|
61
52
|
|
62
53
|
Credits
|
63
54
|
-------
|
@@ -1,32 +1,7 @@
|
|
1
1
|
Spree::CheckoutController.class_eval do
|
2
2
|
before_filter :validate_payments, :only => :update, :if => lambda { @order && @order.has_checkout_step?("payment") && @order.payment? && @order.available_wallet_payment_method }
|
3
|
-
|
3
|
+
|
4
4
|
private
|
5
|
-
def object_params
|
6
|
-
if @order.has_checkout_step?("payment") && @order.payment?
|
7
|
-
if params[:payment_source].present?
|
8
|
-
source_params = params.delete(:payment_source)[non_wallet_payment_method]
|
9
|
-
|
10
|
-
if source_params
|
11
|
-
non_wallet_payment_attributes(params[:order][:payments_attributes]).first[:source_attributes] = source_params
|
12
|
-
end
|
13
|
-
end
|
14
|
-
|
15
|
-
if (params[:order][:payments_attributes])
|
16
|
-
# This method is overrided because spree add all order total in first payment, now after wallet we can have multiple payments.
|
17
|
-
if spree_current_user && @order.available_wallet_payment_method
|
18
|
-
wallet_payments = wallet_payment_attributes(params[:order][:payments_attributes])
|
19
|
-
wallet_payments.first[:amount] = [@order.remaining_total, spree_current_user.store_credits_total].min if wallet_payments.present?
|
20
|
-
params[:order][:payments_attributes] = wallet_payments if remaining_order_total_after_wallet(@order, wallet_payments) <= 0
|
21
|
-
non_wallet_payment_attributes(params[:order][:payments_attributes]).first[:amount] = remaining_order_total_after_wallet(@order, wallet_payments) if non_wallet_payment_attributes(params[:order][:payments_attributes]).present?
|
22
|
-
else
|
23
|
-
params[:order][:payments_attributes].first[:amount] = @order.remaining_total
|
24
|
-
end
|
25
|
-
end
|
26
|
-
end
|
27
|
-
params[:order]
|
28
|
-
end
|
29
|
-
|
30
5
|
def validate_payments
|
31
6
|
payments_attributes = params[:order][:payments_attributes]
|
32
7
|
wallet_payment = wallet_payment_attributes(payments_attributes)
|
@@ -46,6 +46,70 @@ Spree::Order.class_eval do
|
|
46
46
|
Spree::Money.new(remaining_total_after_wallet)
|
47
47
|
end
|
48
48
|
|
49
|
+
def process_payments!
|
50
|
+
if pending_payments.empty? && wallet_payments.empty?
|
51
|
+
raise Spree::Core::GatewayError.new Spree.t(:no_pending_payments)
|
52
|
+
else
|
53
|
+
[pending_payments, wallet_payments].flatten.each do |payment|
|
54
|
+
break if payment_total >= total
|
55
|
+
|
56
|
+
payment.process!
|
57
|
+
|
58
|
+
if payment.completed?
|
59
|
+
self.payment_total += payment.amount
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
63
|
+
rescue Spree::Core::GatewayError => e
|
64
|
+
result = !!Spree::Config[:allow_checkout_on_gateway_error]
|
65
|
+
errors.add(:base, e.message) and return result
|
66
|
+
end
|
67
|
+
|
68
|
+
|
69
|
+
### This methods are extensions of spree/order/checkout.rb
|
70
|
+
|
71
|
+
def update_params_payment_source
|
72
|
+
if has_checkout_step?("payment") && self.payment?
|
73
|
+
if @updating_params[:payment_source].present?
|
74
|
+
source_params = @updating_params.delete(:payment_source)[non_wallet_payment_method]
|
75
|
+
|
76
|
+
if source_params
|
77
|
+
non_wallet_payment_attributes(@updating_params[:order][:payments_attributes]).first[:source_attributes] = source_params
|
78
|
+
end
|
79
|
+
end
|
80
|
+
|
81
|
+
if (@updating_params[:order][:payments_attributes])
|
82
|
+
user = user_or_by_email
|
83
|
+
# This method is overrided because spree add all order total in first payment, now after wallet we can have multiple payments.
|
84
|
+
if user && available_wallet_payment_method
|
85
|
+
wallet_payments = wallet_payment_attributes(@updating_params[:order][:payments_attributes])
|
86
|
+
wallet_payments.first[:amount] = [remaining_total, user.store_credits_total].min if wallet_payments.present?
|
87
|
+
@updating_params[:order][:payments_attributes] = wallet_payments if remaining_order_total_after_wallet(wallet_payments) <= 0
|
88
|
+
non_wallet_payment_attributes(@updating_params[:order][:payments_attributes]).first[:amount] = remaining_order_total_after_wallet(wallet_payments) if non_wallet_payment_attributes(@updating_params[:order][:payments_attributes]).present?
|
89
|
+
else
|
90
|
+
@updating_params[:order][:payments_attributes].first[:amount] = remaining_total
|
91
|
+
end
|
92
|
+
end
|
93
|
+
end
|
94
|
+
@updating_params[:order]
|
95
|
+
end
|
96
|
+
|
97
|
+
def non_wallet_payment_method
|
98
|
+
non_wallet_payment_attributes(@updating_params[:order][:payments_attributes]).first[:payment_method_id] if non_wallet_payment_attributes(@updating_params[:order][:payments_attributes]).first
|
99
|
+
end
|
100
|
+
|
101
|
+
def remaining_order_total_after_wallet(wallet_payments)
|
102
|
+
wallet_payments.present? ? remaining_total - wallet_payments.first[:amount] : remaining_total
|
103
|
+
end
|
104
|
+
|
105
|
+
def wallet_payment_attributes(payment_attributes)
|
106
|
+
payment_attributes.select { |payment| payment["payment_method_id"] == Spree::PaymentMethod::Wallet.first.id.to_s }
|
107
|
+
end
|
108
|
+
|
109
|
+
def non_wallet_payment_attributes(payment_attributes)
|
110
|
+
@non_wallet_payment ||= payment_attributes - wallet_payment_attributes(payment_attributes)
|
111
|
+
end
|
112
|
+
|
49
113
|
private
|
50
114
|
def wallet_payments
|
51
115
|
payments.where(:payment_method_id => Spree::PaymentMethod::Wallet.pluck(:id))
|
@@ -9,17 +9,17 @@
|
|
9
9
|
|
10
10
|
<%= form_for [:admin, @user, @store_credit], :as => :store_credit do |f| %>
|
11
11
|
<%= f.field_container :amount do %>
|
12
|
-
<%= f.label :amount
|
12
|
+
<%= f.label :amount %>*<br />
|
13
13
|
<%= f.text_field :amount, :id => "debit_credit_amount" %>
|
14
14
|
<% end %>
|
15
15
|
|
16
16
|
<%= f.field_container :payment_mode do %>
|
17
|
-
<%= f.label :payment_mode, 'Payment Mode'
|
17
|
+
<%= f.label :payment_mode, 'Payment Mode' %>*<br />
|
18
18
|
<%= f.select :payment_mode, store_credit_class::PAYMENT_MODE.select { |key, value| value >= 0 }, { :prompt => 'Select' } %>
|
19
19
|
<% end %>
|
20
20
|
|
21
21
|
<%= f.field_container :reason do %>
|
22
|
-
<%= f.label :reason
|
22
|
+
<%= f.label :reason %>*<br />
|
23
23
|
<%= f.text_field :reason %>
|
24
24
|
<% end %>
|
25
25
|
|
@@ -1,16 +1,51 @@
|
|
1
1
|
<fieldset id="payment" data-hook>
|
2
2
|
<legend align="center"><%= Spree.t(:payment_information) %></legend>
|
3
3
|
<div data-hook="checkout_payment_step">
|
4
|
+
|
5
|
+
<% if @payment_sources.present? %>
|
6
|
+
<div class="card_options">
|
7
|
+
<%= radio_button_tag 'use_existing_card', 'yes', true %>
|
8
|
+
<label for="use_existing_card_yes">Use an existing card on file</label>
|
9
|
+
<br/>
|
10
|
+
<%= radio_button_tag 'use_existing_card', 'no' %>
|
11
|
+
<label for="use_existing_card_no">Use a new card / payment method</label>
|
12
|
+
</div>
|
13
|
+
|
14
|
+
<div id="existing_cards">
|
15
|
+
<p class="field" data-hook="existing_cards">
|
16
|
+
<table class="existing-credit-card-list">
|
17
|
+
<tbody>
|
18
|
+
<% @payment_sources.each do |card| %>
|
19
|
+
<tr id="<%= dom_id(card,'spree')%>" class="<%= cycle('even', 'odd') %>">
|
20
|
+
<td><%= card.name %></td>
|
21
|
+
<td><%= card.display_number %></td>
|
22
|
+
<td><%= card.month %></td>
|
23
|
+
<td><%= card.year %></td>
|
24
|
+
<td>
|
25
|
+
<%= radio_button_tag "existing_card", card.id, (card == @payment_sources.first), { class: "existing-cc-radio" } %>
|
26
|
+
</td>
|
27
|
+
</tr>
|
28
|
+
<% end %>
|
29
|
+
</tbody>
|
30
|
+
</table>
|
31
|
+
</p>
|
32
|
+
</div>
|
33
|
+
<% end %>
|
34
|
+
|
4
35
|
<div id="payment-method-fields" data-hook>
|
5
36
|
<% if spree_current_user && @order.available_wallet_payment_method && !spree_current_user.store_credits_total.to_f.zero? %>
|
37
|
+
<p>
|
38
|
+
<label>
|
6
39
|
<%= check_box_tag "order[payments_attributes][][payment_method_id]", @order.available_wallet_payment_method.id %>
|
7
|
-
<%= Spree.t(@order.available_wallet_payment_method.name, :scope => :payment_methods, :default => @order.available_wallet_payment_method.name) %>( <%= spree_current_user.store_credits_total %> )
|
40
|
+
<%= Spree.t(@order.available_wallet_payment_method.name, :scope => :payment_methods, :default => @order.available_wallet_payment_method.name) %>( <%= number_to_currency spree_current_user.store_credits_total %> )
|
41
|
+
</label>
|
42
|
+
</p>
|
8
43
|
<% end %>
|
9
|
-
|
44
|
+
|
10
45
|
<% @order.available_payment_methods_without_wallet.each do |method| %>
|
11
46
|
<p>
|
12
47
|
<label>
|
13
|
-
<%= radio_button_tag "order[payments_attributes][][payment_method_id]", method.id %>
|
48
|
+
<%= radio_button_tag "order[payments_attributes][][payment_method_id]", method.id, method == @order.available_payment_methods_without_wallet.first %>
|
14
49
|
<%= Spree.t(method.name, :scope => :payment_methods, :default => method.name) %>
|
15
50
|
</label>
|
16
51
|
</p>
|
@@ -19,8 +54,7 @@
|
|
19
54
|
|
20
55
|
<ul id="payment-methods" data-hook>
|
21
56
|
<% @order.available_payment_methods_without_wallet.each do |method| %>
|
22
|
-
|
23
|
-
<li id="payment_method_<%= method.id %>" class="hidden <%= 'last' if method == @order.available_payment_methods_without_wallet.last %>" data-hook>
|
57
|
+
<li id="payment_method_<%= method.id %>" class="<%= 'last' if method == @order.available_payment_methods_without_wallet.last %>" data-hook>
|
24
58
|
<fieldset>
|
25
59
|
<%= render :partial => "spree/checkout/payment/#{method.method_type}", :locals => { :payment_method => method } %>
|
26
60
|
</fieldset>
|
@@ -28,12 +62,10 @@
|
|
28
62
|
<% end %>
|
29
63
|
</ul>
|
30
64
|
<br style="clear:both;" />
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
</p>
|
36
|
-
<% end %>
|
65
|
+
<p class='field' data-hook='coupon_code'>
|
66
|
+
<%= form.label :coupon_code %><br />
|
67
|
+
<%= form.text_field :coupon_code %>
|
68
|
+
</p>
|
37
69
|
</div>
|
38
70
|
</fieldset>
|
39
71
|
|
@@ -5,7 +5,7 @@ module SpreeWallet
|
|
5
5
|
class_option :auto_run_migrations, :type => :boolean, :default => false
|
6
6
|
|
7
7
|
def add_stylesheets
|
8
|
-
inject_into_file '
|
8
|
+
inject_into_file 'vendor/assets/stylesheets/spree/frontend/all.css', " *= require store/spree_wallet\n", :before => /\*\//, :verbose => true
|
9
9
|
end
|
10
10
|
|
11
11
|
def add_migrations
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: spree_wallet
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 7
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 2
|
8
|
-
-
|
9
|
-
-
|
10
|
-
version: 2.
|
8
|
+
- 2
|
9
|
+
- 0
|
10
|
+
version: 2.2.0
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Nishant 'CyRo' Tuteja
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2014-
|
18
|
+
date: 2014-05-23 00:00:00 Z
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|
21
21
|
name: spree_core
|
@@ -25,12 +25,12 @@ dependencies:
|
|
25
25
|
requirements:
|
26
26
|
- - ~>
|
27
27
|
- !ruby/object:Gem::Version
|
28
|
-
hash:
|
28
|
+
hash: 7
|
29
29
|
segments:
|
30
30
|
- 2
|
31
|
-
-
|
31
|
+
- 2
|
32
32
|
- 0
|
33
|
-
version: 2.
|
33
|
+
version: 2.2.0
|
34
34
|
type: :runtime
|
35
35
|
version_requirements: *id001
|
36
36
|
description: Add wallet payment method functionality to spree
|