effective_orders 1.6.0 → 1.6.1
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 +4 -4
- data/active_admin/effective_orders.rb +22 -5
- data/app/assets/stylesheets/effective_orders/_order.scss +14 -3
- data/app/helpers/effective_orders_helper.rb +21 -15
- data/app/models/effective/order.rb +36 -18
- data/app/models/effective/order_item.rb +4 -0
- data/app/views/effective/orders/_order_items.html.haml +24 -16
- data/app/views/effective/orders/_order_payment_details.html.haml +1 -8
- data/app/views/effective/orders/_order_shipping.html.haml +5 -5
- data/lib/effective_orders/engine.rb +12 -2
- data/lib/effective_orders/version.rb +1 -1
- metadata +2 -16
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f56436464dbe43fb2f2b12173b21c5b6905f8092
|
4
|
+
data.tar.gz: fffc2cb0fca162b283bd9c8363ef44ba3d8a85fe
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1a9dac2ae8b2080f739b5c9a64503ded5bdc2725963c3179347fdd441cd389b2dcc4c28928665b3771225caae59d5d6f411a28db03ee30de354757933d9c2002
|
7
|
+
data.tar.gz: 875e6f55e84c991aa291ed034428bbf623c4c07e38c057dba462fff1bb0dcdfbcab5f7cf0c0e664f614ca0500d0dd01f759369eddba866dc36e6e3964eea128e
|
@@ -28,21 +28,38 @@ if defined?(ActiveAdmin)
|
|
28
28
|
end
|
29
29
|
|
30
30
|
index :download_links => false do
|
31
|
+
column :purchased_at
|
32
|
+
|
31
33
|
column 'Order', :sortable => :id do |order|
|
32
34
|
link_to "##{order.to_param}", effective_orders.order_path(order)
|
33
35
|
end
|
34
36
|
|
35
|
-
column 'Buyer'
|
37
|
+
column 'Buyer Email' do |order|
|
38
|
+
mail_to order.user.email
|
39
|
+
end
|
40
|
+
|
41
|
+
column 'Buyer Name', :sortable => :user_id do |order|
|
36
42
|
user_path = [EffectiveOrders.active_admin_namespace.presence, 'user_path'].compact.join('_')
|
37
43
|
link_to order.user, (public_send(user_path, order.user) rescue '#')
|
38
44
|
end
|
39
45
|
|
40
|
-
column '
|
41
|
-
|
46
|
+
column 'Order Items' do |order|
|
47
|
+
content_tag(:ul) do
|
48
|
+
(order.order_items).map { |oi| content_tag(:li, oi) }.join.html_safe
|
49
|
+
end
|
42
50
|
end
|
43
51
|
|
44
|
-
column
|
45
|
-
|
52
|
+
column 'Total' do |order|
|
53
|
+
price_to_currency(order.total)
|
54
|
+
end
|
55
|
+
|
56
|
+
column :payment_method do |order|
|
57
|
+
order.payment_method
|
58
|
+
end
|
59
|
+
|
60
|
+
column :payment_card_type do |order|
|
61
|
+
order.payment_card_type
|
62
|
+
end
|
46
63
|
|
47
64
|
column do |order|
|
48
65
|
link_to('View Receipt', effective_orders.order_path(order), class: 'member_link view_link') if order.purchased?
|
@@ -1,6 +1,8 @@
|
|
1
1
|
.effective-order {
|
2
|
-
|
2
|
+
table {
|
3
3
|
clear: both;
|
4
|
+
width: 600px;
|
5
|
+
margin-bottom: 25px;
|
4
6
|
|
5
7
|
tfoot {
|
6
8
|
> tr:first-child {
|
@@ -13,12 +15,16 @@
|
|
13
15
|
padding-right: 65px;
|
14
16
|
}
|
15
17
|
|
18
|
+
td {
|
19
|
+
text-align: right;
|
20
|
+
}
|
21
|
+
|
16
22
|
.actions { border: none; }
|
17
23
|
}
|
18
|
-
|
19
|
-
.price { text-align: right; }
|
20
24
|
}
|
21
25
|
|
26
|
+
.price { text-align: right; }
|
27
|
+
|
22
28
|
.effective-stripe-subscription {
|
23
29
|
input {
|
24
30
|
margin-top: 5px;
|
@@ -34,5 +40,10 @@
|
|
34
40
|
> * {
|
35
41
|
display: inline-block;
|
36
42
|
}
|
43
|
+
}
|
37
44
|
|
45
|
+
@media print {
|
46
|
+
.effective-order-purchase-actions { display: none; }
|
47
|
+
.print-button { display: none; }
|
48
|
+
.resend-receipt-button { display: none; }
|
38
49
|
}
|
@@ -15,7 +15,7 @@ module EffectiveOrdersHelper
|
|
15
15
|
title[1..-1].each { |line| output << "<br>#{line}" }
|
16
16
|
end.html_safe
|
17
17
|
end
|
18
|
-
end.join
|
18
|
+
end.join.html_safe
|
19
19
|
end
|
20
20
|
end
|
21
21
|
|
@@ -107,22 +107,28 @@ module EffectiveOrdersHelper
|
|
107
107
|
# Used by the _payment_details partial
|
108
108
|
def tableize_hash(hash, options = {class: 'table table-bordered'})
|
109
109
|
if hash.present? && hash.kind_of?(Hash)
|
110
|
-
content_tag(:table, options[:class]) do
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
v
|
110
|
+
content_tag(:table, class: options[:class]) do
|
111
|
+
title = options.delete(:title)
|
112
|
+
|
113
|
+
content = content_tag(:tbody) do
|
114
|
+
hash.map do |k, v|
|
115
|
+
content_tag(:tr) do
|
116
|
+
content_tag((options[:th] ? :th : :td), k) +
|
117
|
+
content_tag(:td) do
|
118
|
+
if v.kind_of?(Hash)
|
119
|
+
tableize_hash(v, options.merge(th: (options.key?(:sub_th) ? options[:sub_th] : options[:th])))
|
120
|
+
elsif v.kind_of?(Array)
|
121
|
+
'[' + v.join(', ') + ']'
|
122
|
+
else
|
123
|
+
v
|
124
|
+
end
|
121
125
|
end
|
122
126
|
end
|
123
|
-
end
|
124
|
-
end
|
125
|
-
|
127
|
+
end.join.html_safe
|
128
|
+
end
|
129
|
+
|
130
|
+
title.blank? ? content : (content_tag(:thead) { content_tag(:tr) { content_tag(:th, title, colspan: 2) } } + content)
|
131
|
+
end
|
126
132
|
else
|
127
133
|
hash.to_s.html_safe
|
128
134
|
end
|
@@ -239,6 +239,8 @@ module Effective
|
|
239
239
|
end
|
240
240
|
|
241
241
|
def purchase_method
|
242
|
+
return 'None' unless purchased?
|
243
|
+
|
242
244
|
if purchased?(:stripe_connect)
|
243
245
|
'Stripe Connect'
|
244
246
|
elsif purchased?(:stripe)
|
@@ -247,31 +249,47 @@ module Effective
|
|
247
249
|
'Moneris'
|
248
250
|
elsif purchased?(:paypal)
|
249
251
|
'PayPal'
|
250
|
-
|
252
|
+
else
|
251
253
|
'Online'
|
254
|
+
end
|
255
|
+
end
|
256
|
+
alias_method :payment_method, :purchase_method
|
257
|
+
|
258
|
+
def purchase_card_type
|
259
|
+
return 'None' unless purchased?
|
260
|
+
|
261
|
+
if purchased?(:stripe_connect)
|
262
|
+
((payment[:charge] || payment['charge'])['card']['brand'] rescue 'Unknown')
|
263
|
+
elsif purchased?(:stripe)
|
264
|
+
((payment[:charge] || payment['charge'])['card']['brand'] rescue 'Unknown')
|
265
|
+
elsif purchased?(:moneris)
|
266
|
+
payment[:card] || payment['card'] || 'Unknown'
|
267
|
+
elsif purchased?(:paypal)
|
268
|
+
payment[:payment_type] || payment['payment_type'] || 'Unknown'
|
252
269
|
else
|
253
|
-
'
|
270
|
+
'Online'
|
254
271
|
end
|
255
272
|
end
|
273
|
+
alias_method :payment_card_type, :purchase_card_type
|
256
274
|
|
257
275
|
def purchased?(provider = nil)
|
258
276
|
return false if (purchase_state != EffectiveOrders::PURCHASED)
|
259
|
-
return true if provider == nil
|
260
|
-
|
261
|
-
|
262
|
-
|
263
|
-
|
264
|
-
|
265
|
-
|
266
|
-
|
267
|
-
|
268
|
-
|
269
|
-
|
270
|
-
|
271
|
-
|
272
|
-
|
273
|
-
|
274
|
-
|
277
|
+
return true if provider == nil || payment.kind_of?(Hash) == false
|
278
|
+
|
279
|
+
case provider.to_sym
|
280
|
+
when :stripe_connect
|
281
|
+
charge = (payment[:charge] || payment['charge'])
|
282
|
+
charge['id'] && charge['customer'] && charge['application_fee'].present?
|
283
|
+
when :stripe
|
284
|
+
charge = (payment[:charge] || payment['charge'])
|
285
|
+
charge['id'] && charge['customer']
|
286
|
+
when :moneris
|
287
|
+
(payment[:response_code] || payment['response_code']) &&
|
288
|
+
(payment[:transactionKey] || payment['transactionKey'])
|
289
|
+
when :paypal
|
290
|
+
(payment[:payer_email] || payment['payer_email'])
|
291
|
+
else
|
292
|
+
raise "Unknown provider #{provider} passed to Effective::Order.purchased?"
|
275
293
|
end
|
276
294
|
end
|
277
295
|
|
@@ -28,6 +28,10 @@ module Effective
|
|
28
28
|
scope :sold, -> { joins(:order).where(:orders => {:purchase_state => EffectiveOrders::PURCHASED}) }
|
29
29
|
scope :sold_by, lambda { |user| sold().where(:seller_id => user.try(:id)) }
|
30
30
|
|
31
|
+
def to_s
|
32
|
+
(quantity || 0) > 1 ? "#{quantity}x #{title}" : title
|
33
|
+
end
|
34
|
+
|
31
35
|
def subtotal
|
32
36
|
price * quantity
|
33
37
|
end
|
@@ -1,40 +1,48 @@
|
|
1
1
|
- include_download_column = order.purchased? && order.order_items.any? { |order_item| order_item.purchased_download_url.present? rescue false }
|
2
2
|
|
3
3
|
.effective-order
|
4
|
-
%table.table
|
5
|
-
|
4
|
+
%table.table
|
6
5
|
%thead
|
7
6
|
%tr
|
8
|
-
%th.quantity
|
9
|
-
%th.item
|
7
|
+
%th.quantity Qty
|
8
|
+
%th.item= order.order_items.length > 1 ? 'Items' : 'Item'
|
10
9
|
- if include_download_column
|
11
|
-
%th.download
|
12
|
-
%th.price
|
10
|
+
%th.download Download
|
11
|
+
%th.price Price
|
13
12
|
|
14
13
|
%tbody
|
15
14
|
- order.order_items.each do |item|
|
16
15
|
%tr
|
17
|
-
%td.quantity
|
18
|
-
%td.item
|
16
|
+
%td.quantity= item.quantity
|
17
|
+
%td.item
|
19
18
|
= item.title.html_safe
|
20
19
|
- if order.new_record? && item.purchasable.kind_of?(Effective::Subscription)
|
21
20
|
= render :partial => 'effective/orders/stripe/subscription_fields', :locals => {:form => form, :subscription => item.purchasable }
|
22
21
|
|
23
22
|
- if include_download_column
|
24
|
-
%td.download
|
23
|
+
%td.download
|
25
24
|
- if item.purchased? && (item.purchased_download_url rescue nil).present?
|
26
25
|
= link_to 'download', item.purchased_download_url
|
27
26
|
- else
|
28
27
|
= '-'
|
29
|
-
%td.price
|
28
|
+
%td.price= price_to_currency(item.subtotal)
|
30
29
|
|
31
30
|
%tfoot
|
32
31
|
%tr
|
33
|
-
%th
|
34
|
-
|
32
|
+
%th.quantity
|
33
|
+
- if include_download_column
|
34
|
+
%th.download
|
35
|
+
%th.subtotal Subtotal
|
36
|
+
%td.price.subtotal-price= price_to_currency(order.subtotal)
|
35
37
|
%tr
|
36
|
-
%th
|
37
|
-
|
38
|
+
%th.quantity
|
39
|
+
- if include_download_column
|
40
|
+
%th.download
|
41
|
+
%th.tax Tax
|
42
|
+
%td.price.tax-price= price_to_currency(order.tax)
|
38
43
|
%tr
|
39
|
-
%th
|
40
|
-
|
44
|
+
%th.quantity
|
45
|
+
- if include_download_column
|
46
|
+
%th.download
|
47
|
+
%th.total Total Due
|
48
|
+
%td.price.total-price= price_to_currency(order.total)
|
@@ -1,10 +1,3 @@
|
|
1
1
|
- if order.payment.present?
|
2
2
|
.effective-order-payment-details
|
3
|
-
|
4
|
-
|
5
|
-
- if order.purchased?
|
6
|
-
%p This order was purchased with the following details:
|
7
|
-
- elsif order.declined?
|
8
|
-
%p This order was declined with the following details:
|
9
|
-
|
10
|
-
= tableize_hash(order.payment, class: 'table')
|
3
|
+
= tableize_hash(order.payment, {class: 'table', title: 'Payment Details'})
|
@@ -1,14 +1,14 @@
|
|
1
1
|
.effective-order-shipping
|
2
|
-
%table.table
|
2
|
+
%table.table
|
3
3
|
%thead
|
4
4
|
%tr
|
5
|
-
%th
|
5
|
+
%th= "#{order.purchased? ? 'Sold to' : 'Bill to'}"
|
6
6
|
- if order.shipping_address.present? && !order.shipping_address.empty?
|
7
|
-
%th
|
7
|
+
%th Ship to
|
8
8
|
|
9
9
|
%tbody
|
10
10
|
%tr
|
11
|
-
%td
|
11
|
+
%td
|
12
12
|
- if order.billing_address.present? && !order.billing_address.empty?
|
13
13
|
= render :partial => 'effective/addresses/address', :locals => {:address => order.billing_address, :email => order.user.email}
|
14
14
|
- else
|
@@ -18,5 +18,5 @@
|
|
18
18
|
%br
|
19
19
|
|
20
20
|
- if order.shipping_address.present? && !order.shipping_address.empty?
|
21
|
-
%td
|
21
|
+
%td
|
22
22
|
= render :partial => 'effective/addresses/address', :locals => {:address => order.shipping_address}
|
@@ -35,7 +35,12 @@ module EffectiveOrders
|
|
35
35
|
# Set up our Stripe API Key
|
36
36
|
initializer "effective_orders.stripe_api_key", :after => :load_config_initializers do |app|
|
37
37
|
if EffectiveOrders.stripe_enabled
|
38
|
-
|
38
|
+
begin
|
39
|
+
require 'stripe'
|
40
|
+
rescue Exception
|
41
|
+
raise "unable to load stripe. Plese add gem 'stripe' to your Gemfile and then 'bundle install'"
|
42
|
+
end
|
43
|
+
|
39
44
|
::Stripe.api_key = EffectiveOrders.stripe[:secret_key]
|
40
45
|
end
|
41
46
|
end
|
@@ -43,7 +48,12 @@ module EffectiveOrders
|
|
43
48
|
# Use ActiveAdmin (optional)
|
44
49
|
initializer 'effective_orders.active_admin' do
|
45
50
|
if EffectiveOrders.use_active_admin?
|
46
|
-
|
51
|
+
begin
|
52
|
+
require 'activeadmin'
|
53
|
+
rescue Exception
|
54
|
+
raise "unable to load activeadmin. Plese add gem 'activeadmin' to your Gemfile and then 'bundle install'"
|
55
|
+
end
|
56
|
+
|
47
57
|
ActiveAdmin.application.load_paths.unshift Dir["#{config.root}/active_admin"]
|
48
58
|
|
49
59
|
Rails.application.config.to_prepare do
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: effective_orders
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.6.
|
4
|
+
version: 1.6.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Code and Effect
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-11-
|
11
|
+
date: 2015-11-24 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -38,20 +38,6 @@ dependencies:
|
|
38
38
|
- - ">="
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '0'
|
41
|
-
- !ruby/object:Gem::Dependency
|
42
|
-
name: devise
|
43
|
-
requirement: !ruby/object:Gem::Requirement
|
44
|
-
requirements:
|
45
|
-
- - ">="
|
46
|
-
- !ruby/object:Gem::Version
|
47
|
-
version: '0'
|
48
|
-
type: :runtime
|
49
|
-
prerelease: false
|
50
|
-
version_requirements: !ruby/object:Gem::Requirement
|
51
|
-
requirements:
|
52
|
-
- - ">="
|
53
|
-
- !ruby/object:Gem::Version
|
54
|
-
version: '0'
|
55
41
|
- !ruby/object:Gem::Dependency
|
56
42
|
name: haml-rails
|
57
43
|
requirement: !ruby/object:Gem::Requirement
|