effective_orders 1.2.0 → 1.2.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: c7ae38c1740cd0fbe0188bb662c302c209218bcf
4
- data.tar.gz: 8bc72c28a5cd18d2437068c3b43f2670ba74d140
3
+ metadata.gz: 18b94b140cb5e27733403db8ff5c2f2d5334ec53
4
+ data.tar.gz: 5b50dd174ecb6da78ffadcedc8268c75dc238815
5
5
  SHA512:
6
- metadata.gz: ef0673ac7015c222e065432e5bd167ab759107369127a06e5816ead520293a8292affa9189a5ec637a370764cae5b6bf90e6b0990bc3101e2b2c790ead13b6ed
7
- data.tar.gz: dadf0b8b6ccc382db5c4bcfe9f89989566d46cae4e926fa1914125de8a1cdbccbb55fa8398e901fcfc2becd4c9f4549c6203db6db9be0976ba9045073926552d
6
+ metadata.gz: 0a7cab5b36a1ef78644e174b338862e256ab15a7d7f5debbcb41174eec48958b22b52bb9b1826aac9b5caa0b95daf7f62f70f1fbe1de142c878573ed47f3c569
7
+ data.tar.gz: 80193c2d5065a6fc1689a267cbe3efb8225898fbbaa3026103ecdf0914b54d2f7e7c3b5e15de67473e05ca032271c56088b8d66456325e9759ec69f466870683
@@ -8,7 +8,11 @@ module Effective
8
8
  end
9
9
 
10
10
  def moneris_postback
11
- @order ||= Effective::Order.find(params[:response_order_id].to_i - EffectiveOrders.moneris[:order_nudge].to_i)
11
+ response_order_id = (EffectiveOrders.obfuscate_order_ids == true ? Effective::Order.deobfuscate(params[:response_order_id]).to_i : params[:response_order_id].to_i)
12
+ response_order_id = response_order_id - EffectiveOrders.moneris[:order_nudge].to_i
13
+
14
+ @order ||= Effective::Order.find_by_id(response_order_id)
15
+ raise ActiveRecord::RecordNotFound unless @order
12
16
 
13
17
  EffectiveOrders.authorized?(self, :update, @order)
14
18
 
@@ -20,8 +20,8 @@ module Effective
20
20
  if (purchasable.price || 0).kind_of?(Integer)
21
21
  purchasable.price || 0
22
22
  else
23
- ActiveSupport::Deprecation.warn('price is a non-integer. It should be an Integer representing the number of cents. Continuing with (price * 100.0).floor conversion') unless EffectiveOrders.silence_deprecation_warnings
24
- (purchasable.price * 100.0).floor rescue 0
23
+ ActiveSupport::Deprecation.warn('price is a non-integer. It should be an Integer representing the number of cents. Continuing with (price * 100.0).round(0).to_i conversion') unless EffectiveOrders.silence_deprecation_warnings
24
+ (purchasable.price * 100.0).round(0).to_i rescue 0
25
25
  end
26
26
  end
27
27
 
@@ -30,7 +30,7 @@ module Effective
30
30
  end
31
31
 
32
32
  def tax
33
- tax_exempt ? 0 : (subtotal * tax_rate).ceil
33
+ tax_exempt ? 0 : (subtotal * tax_rate).round(0).to_i
34
34
  end
35
35
 
36
36
  def total
@@ -2,24 +2,26 @@ if defined?(EffectiveDatatables)
2
2
  module Effective
3
3
  module Datatables
4
4
  class Orders < Effective::Datatable
5
+ default_order :purchased_at, :desc
6
+
5
7
  table_column :id do |order|
6
8
  order.to_param
7
9
  end
8
10
 
9
- array_column :email, :label => 'Buyer', :if => Proc.new { attributes[:user_id].blank? } do |order|
10
- link_to order.user.email, (edit_admin_user_path(order.user) rescue admin_user_path(order.user) rescue '#')
11
+ table_column :email, :column => 'users.email', :label => 'Buyer', :if => Proc.new { attributes[:user_id].blank? } do |order|
12
+ link_to order[:email], (edit_admin_user_path(order.user_id) rescue admin_user_path(order.user_id) rescue '#')
11
13
  end
12
14
 
13
- array_column :order_items do |order|
15
+ table_column :order_items, :sortable => false, :column => 'order_items.title' do |order|
14
16
  content_tag(:ul) do
15
- order.order_items.map { |oi| content_tag(:li, oi.title) }.join().html_safe
17
+ order[:order_items].split('!!OI!!').map { |oi| content_tag(:li, oi) }.join().html_safe
16
18
  end
17
19
  end
18
20
 
19
21
  table_column :purchased_at
20
22
 
21
- array_column :total do |order|
22
- price_to_currency(order.total)
23
+ table_column :total do |order|
24
+ price_to_currency(order[:total].to_i)
23
25
  end
24
26
 
25
27
  table_column :actions, :sortable => false, :filter => false do |order|
@@ -32,16 +34,31 @@ if defined?(EffectiveDatatables)
32
34
  end
33
35
 
34
36
  def collection
37
+ collection = Effective::Order.unscoped.purchased
38
+ .joins(:user)
39
+ .joins(:order_items)
40
+ .group('users.email')
41
+ .group('orders.id')
42
+ .select('users.email AS email')
43
+ .select('orders.*')
44
+ .select("#{query_total} AS total")
45
+ .select("string_agg(order_items.title, '!!OI!!') AS order_items")
46
+
35
47
  if attributes[:user_id].present?
36
- Effective::Order.purchased.where(:user_id => attributes[:user_id]).includes(:user).includes(:order_items)
48
+ collection.where(:user_id => attributes[:user_id])
37
49
  else
38
- Effective::Order.purchased.includes(:user).includes(:order_items)
50
+ collection
39
51
  end
52
+
53
+ end
54
+
55
+ def query_total
56
+ "SUM((order_items.price * order_items.quantity) + (CASE order_items.tax_exempt WHEN true THEN 0 ELSE ((order_items.price * order_items.quantity) * order_items.tax_rate) END))"
40
57
  end
41
58
 
42
59
  def search_column(collection, table_column, search_term)
43
- if table_column[:name] == 'id'
44
- collection.where(:id => search_term)
60
+ if table_column[:name] == 'total'
61
+ collection.having("#{query_total} = ?", (search_term.gsub(/[^0-9.]/, '').to_f * 100.0).to_i)
45
62
  else
46
63
  super
47
64
  end
@@ -162,10 +162,12 @@ module Effective
162
162
  billing_address.full_name
163
163
  elsif user.to_s.start_with?('#<User:') == false
164
164
  user.to_s
165
- elsif user.respond_to?(:first_name) && user.respond_to?(:last_name)
166
- user.first_name.to_s + ' ' + user.last_name.to_s
167
165
  elsif user.respond_to?(:full_name)
168
166
  user.full_name.to_s
167
+ elsif user.respond_to?(:first_name) && user.respond_to?(:last_name)
168
+ user.first_name.to_s + ' ' + user.last_name.to_s
169
+ else
170
+ ''
169
171
  end
170
172
  end
171
173
 
@@ -33,7 +33,7 @@ module Effective
33
33
  end
34
34
 
35
35
  def tax # This is the total tax, for 3 items if quantity is 3
36
- tax_exempt ? 0 : (subtotal * tax_rate).ceil
36
+ tax_exempt ? 0 : (subtotal * tax_rate).round(0).to_i
37
37
  end
38
38
 
39
39
  def total
@@ -46,7 +46,7 @@ module Effective
46
46
  elsif value.kind_of?(String) && !value.include?('.') # Looks like an integer
47
47
  super
48
48
  else # Could be Float, BigDecimal, or String like 9.99
49
- ActiveSupport::Deprecation.warn('order_item.price= was passed a non-integer. Expecting an Integer representing the number of cents. Continuing with (price * 100.0).floor conversion') unless EffectiveOrders.silence_deprecation_warnings
49
+ ActiveSupport::Deprecation.warn('order_item.price= was passed a non-integer. Expecting an Integer representing the number of cents. Continuing with (price * 100.0).round(0).to_i conversion') unless EffectiveOrders.silence_deprecation_warnings
50
50
  super((value.to_f * 100.0).to_i)
51
51
  end
52
52
  end
@@ -85,7 +85,7 @@ module Effective
85
85
 
86
86
  def price_with_coupon(amount, coupon)
87
87
  if coupon.percent_off.present?
88
- (amount * (coupon.percent_off.to_i / 100.0)).floor
88
+ (amount * (coupon.percent_off.to_i / 100.0)).round(0).to_i
89
89
  else
90
90
  [0, amount - coupon.amount_off].max
91
91
  end
@@ -8,14 +8,14 @@
8
8
  %tbody
9
9
  %tr
10
10
  %td{:style => 'text-align: left;'}
11
- - if order.billing_name.present? && EffectiveAddresses.use_full_name == false
11
+ - if order.billing_address.try(:full_name).present? == false
12
12
  = order.billing_name
13
13
  %br
14
- = mail_to order.user.email
14
+ = mail_to(order.user.email)
15
+ %br
15
16
 
16
17
  - if order.billing_address.present?
17
- %br
18
- = render :partial => 'effective/addresses/address', :locals => {:address => order.billing_address}
18
+ = render :partial => 'effective/addresses/address', :locals => {:address => order.billing_address, :email => (order.user.email if order.billing_address.try(:full_name).present?)}
19
19
 
20
20
  - if EffectiveOrders.require_shipping_address && order.shipping_address.present?
21
21
  %td{:style => 'text-align: left;'}
@@ -66,8 +66,8 @@ module EffectiveOrders
66
66
  if @@minimum_charge.nil? || @@minimum_charge.kind_of?(Integer)
67
67
  @@minimum_charge
68
68
  else
69
- ActiveSupport::Deprecation.warn('EffectiveOrders.minimum_charge config option is a non-integer. It should be an Integer representing the number of cents. Continuing with (price * 100.0).floor conversion') unless EffectiveOrders.silence_deprecation_warnings
70
- ((@@minimum_charge * 100.0).floor rescue nil)
69
+ ActiveSupport::Deprecation.warn('EffectiveOrders.minimum_charge config option is a non-integer. It should be an Integer representing the number of cents. Continuing with (price * 100.0).round(0).to_i conversion') unless EffectiveOrders.silence_deprecation_warnings
70
+ ((@@minimum_charge * 100.0).round(0).to_i rescue nil)
71
71
  end
72
72
  end
73
73
 
@@ -1,3 +1,3 @@
1
1
  module EffectiveOrders
2
- VERSION = '1.2.0'.freeze
2
+ VERSION = '1.2.1'.freeze
3
3
  end
@@ -345,3 +345,10 @@ BLAHBLAH
345
345
   (0.1ms) SELECT MAX("orders"."id") AS max_id FROM "orders"
346
346
   (0.3ms) SELECT MAX("orders"."id") AS max_id FROM "orders"
347
347
   (0.1ms) SELECT MAX("orders"."id") AS max_id FROM "orders"
348
+  (0.1ms) SELECT MAX("orders"."id") AS max_id FROM "orders"
349
+  (0.1ms) SELECT MAX("orders"."id") AS max_id FROM "orders"
350
+  (0.2ms) SELECT MAX("orders"."id") AS max_id FROM "orders"
351
+  (0.1ms) SELECT MAX("orders"."id") AS max_id FROM "orders"
352
+  (0.2ms) SELECT MAX("orders"."id") AS max_id FROM "orders"
353
+  (0.1ms) SELECT MAX("orders"."id") AS max_id FROM "orders"
354
+  (0.1ms) SELECT MAX("orders"."id") AS max_id FROM "orders"
@@ -81,7 +81,7 @@ describe Effective::Subscription do
81
81
  subscription.stripe_plan_id = plan.id
82
82
  subscription.stripe_coupon_id = coupon.id
83
83
 
84
- subscription.price.should eq (plan.amount * (coupon.percent_off.to_i / 100.0)).floor
84
+ subscription.price.should eq (plan.amount * (coupon.percent_off.to_i / 100.0)).round(0).to_i
85
85
  subscription.title.include?('25% off').should eq true
86
86
  end
87
87
 
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.2.0
4
+ version: 1.2.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: 2014-12-22 00:00:00.000000000 Z
11
+ date: 2014-12-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -100,14 +100,14 @@ dependencies:
100
100
  requirements:
101
101
  - - ">="
102
102
  - !ruby/object:Gem::Version
103
- version: 1.0.2
103
+ version: 1.0.3
104
104
  type: :runtime
105
105
  prerelease: false
106
106
  version_requirements: !ruby/object:Gem::Requirement
107
107
  requirements:
108
108
  - - ">="
109
109
  - !ruby/object:Gem::Version
110
- version: 1.0.2
110
+ version: 1.0.3
111
111
  - !ruby/object:Gem::Dependency
112
112
  name: effective_obfuscation
113
113
  requirement: !ruby/object:Gem::Requirement
@@ -150,6 +150,104 @@ dependencies:
150
150
  - - ">="
151
151
  - !ruby/object:Gem::Version
152
152
  version: '0'
153
+ - !ruby/object:Gem::Dependency
154
+ name: factory_girl_rails
155
+ requirement: !ruby/object:Gem::Requirement
156
+ requirements:
157
+ - - ">="
158
+ - !ruby/object:Gem::Version
159
+ version: '0'
160
+ type: :development
161
+ prerelease: false
162
+ version_requirements: !ruby/object:Gem::Requirement
163
+ requirements:
164
+ - - ">="
165
+ - !ruby/object:Gem::Version
166
+ version: '0'
167
+ - !ruby/object:Gem::Dependency
168
+ name: rspec-rails
169
+ requirement: !ruby/object:Gem::Requirement
170
+ requirements:
171
+ - - ">="
172
+ - !ruby/object:Gem::Version
173
+ version: '0'
174
+ type: :development
175
+ prerelease: false
176
+ version_requirements: !ruby/object:Gem::Requirement
177
+ requirements:
178
+ - - ">="
179
+ - !ruby/object:Gem::Version
180
+ version: '0'
181
+ - !ruby/object:Gem::Dependency
182
+ name: shoulda-matchers
183
+ requirement: !ruby/object:Gem::Requirement
184
+ requirements:
185
+ - - ">="
186
+ - !ruby/object:Gem::Version
187
+ version: '0'
188
+ type: :development
189
+ prerelease: false
190
+ version_requirements: !ruby/object:Gem::Requirement
191
+ requirements:
192
+ - - ">="
193
+ - !ruby/object:Gem::Version
194
+ version: '0'
195
+ - !ruby/object:Gem::Dependency
196
+ name: sqlite3
197
+ requirement: !ruby/object:Gem::Requirement
198
+ requirements:
199
+ - - ">="
200
+ - !ruby/object:Gem::Version
201
+ version: '0'
202
+ type: :development
203
+ prerelease: false
204
+ version_requirements: !ruby/object:Gem::Requirement
205
+ requirements:
206
+ - - ">="
207
+ - !ruby/object:Gem::Version
208
+ version: '0'
209
+ - !ruby/object:Gem::Dependency
210
+ name: guard
211
+ requirement: !ruby/object:Gem::Requirement
212
+ requirements:
213
+ - - ">="
214
+ - !ruby/object:Gem::Version
215
+ version: '0'
216
+ type: :development
217
+ prerelease: false
218
+ version_requirements: !ruby/object:Gem::Requirement
219
+ requirements:
220
+ - - ">="
221
+ - !ruby/object:Gem::Version
222
+ version: '0'
223
+ - !ruby/object:Gem::Dependency
224
+ name: guard-rspec
225
+ requirement: !ruby/object:Gem::Requirement
226
+ requirements:
227
+ - - ">="
228
+ - !ruby/object:Gem::Version
229
+ version: '0'
230
+ type: :development
231
+ prerelease: false
232
+ version_requirements: !ruby/object:Gem::Requirement
233
+ requirements:
234
+ - - ">="
235
+ - !ruby/object:Gem::Version
236
+ version: '0'
237
+ - !ruby/object:Gem::Dependency
238
+ name: guard-livereload
239
+ requirement: !ruby/object:Gem::Requirement
240
+ requirements:
241
+ - - ">="
242
+ - !ruby/object:Gem::Version
243
+ version: '0'
244
+ type: :development
245
+ prerelease: false
246
+ version_requirements: !ruby/object:Gem::Requirement
247
+ requirements:
248
+ - - ">="
249
+ - !ruby/object:Gem::Version
250
+ version: '0'
153
251
  description: Quickly build an online store with carts, orders, automatic email receipts
154
252
  and payment collection via Stripe, StripeConnect, PayPal and Moneris.
155
253
  email: