effective_orders 5.1.5 → 5.1.9
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/app/controllers/effective/concerns/purchase.rb +1 -1
- data/app/models/effective/order.rb +62 -15
- data/app/views/effective/orders/_order_notes.html.haml +2 -2
- data/app/views/effective/orders/mark_as_paid/_form.html.haml +8 -3
- data/lib/effective_orders/version.rb +1 -1
- data/lib/effective_orders.rb +10 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: aebed7dcf8c4b8c6e754b4425d407020ab7e3078baa82e0e5ddb10d748041d74
|
4
|
+
data.tar.gz: a834e0574e803ad7af2e568395814a3fc7e2b129953dcc37e52bea17bae1a963
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b4162e7ec6328b52f4dc36b3a79199966980948cc8dbb9612a460105e4f9682c70586424be157baf897b07f501bff158499e80f3c77ea7f229b3351fa9bc9d61
|
7
|
+
data.tar.gz: 27eff0b3035f2dbaf1e426aa7337a933b8f90ef44e88da04eac4fab0ba77f3d7d8ea3695b6bd3cf6e7d42f933f5186868076e45fb25c66717b1d8e423401883d
|
@@ -11,7 +11,7 @@ module Effective
|
|
11
11
|
Effective::Cart.where(user: @order.user).destroy_all
|
12
12
|
|
13
13
|
if flash[:success].blank?
|
14
|
-
if email &&
|
14
|
+
if email && @order.send_order_receipt_to_buyer?
|
15
15
|
flash[:success] = "Payment successful! A receipt has been sent to #{@order.emails_send_to}"
|
16
16
|
else
|
17
17
|
flash[:success] = "Payment successful! An email receipt has not been sent."
|
@@ -69,9 +69,10 @@ module Effective
|
|
69
69
|
before_validation { assign_billing_name }
|
70
70
|
before_validation { assign_email }
|
71
71
|
before_validation { assign_last_address }
|
72
|
+
before_validation { assign_user_address }
|
72
73
|
|
73
74
|
before_validation(if: -> { confirmed_checkout }) do
|
74
|
-
|
75
|
+
assign_attributes(state: EffectiveOrders::CONFIRMED) if pending?
|
75
76
|
end
|
76
77
|
|
77
78
|
before_save(if: -> { state_was == EffectiveOrders::PURCHASED }) do
|
@@ -142,6 +143,7 @@ module Effective
|
|
142
143
|
scope :confirmed, -> { where(state: EffectiveOrders::CONFIRMED) }
|
143
144
|
scope :deferred, -> { where(state: EffectiveOrders::DEFERRED) }
|
144
145
|
scope :declined, -> { where(state: EffectiveOrders::DECLINED) }
|
146
|
+
scope :abandoned, -> { where(state: EffectiveOrders::ABANDONED) }
|
145
147
|
scope :refunds, -> { purchased.where('total < ?', 0) }
|
146
148
|
|
147
149
|
# Effective::Order.new()
|
@@ -156,30 +158,34 @@ module Effective
|
|
156
158
|
def initialize(atts = nil, &block)
|
157
159
|
super(state: EffectiveOrders::PENDING) # Initialize with state: PENDING
|
158
160
|
|
159
|
-
return unless atts.present?
|
161
|
+
return self unless atts.present?
|
160
162
|
|
161
163
|
if atts.kind_of?(Hash)
|
162
|
-
items = Array(atts
|
164
|
+
items = Array(atts[:item]) + Array(atts[:items])
|
163
165
|
|
164
|
-
self.user = atts
|
166
|
+
self.user = atts[:user] || (items.first.user if items.first.respond_to?(:user))
|
165
167
|
|
166
|
-
if (address = atts
|
168
|
+
if (address = atts[:billing_address]).present?
|
167
169
|
self.billing_address = address
|
168
170
|
self.billing_address.full_name ||= user.to_s.presence
|
169
171
|
end
|
170
172
|
|
171
|
-
if (address = atts
|
173
|
+
if (address = atts[:shipping_address]).present?
|
172
174
|
self.shipping_address = address
|
173
175
|
self.shipping_address.full_name ||= user.to_s.presence
|
174
176
|
end
|
175
177
|
|
176
|
-
atts.
|
178
|
+
atts.except(:item, :items, :user, :billing_address, :shipping_address).each do |key, value|
|
179
|
+
self.send("#{key}=", value)
|
180
|
+
end
|
177
181
|
|
178
182
|
add(items) if items.present?
|
179
183
|
else # Attributes are not a Hash
|
180
184
|
self.user = atts.user if atts.respond_to?(:user)
|
181
185
|
add(atts)
|
182
186
|
end
|
187
|
+
|
188
|
+
self
|
183
189
|
end
|
184
190
|
|
185
191
|
# Items can be an Effective::Cart, an Effective::order, a single acts_as_purchasable, or multiple acts_as_purchasables
|
@@ -198,9 +204,21 @@ module Effective
|
|
198
204
|
# Duplicate an existing order
|
199
205
|
self.note_to_buyer ||= item.note_to_buyer
|
200
206
|
self.note_internal ||= item.note_internal
|
207
|
+
self.cc ||= item.cc
|
201
208
|
|
202
209
|
item.order_items.select { |oi| oi.purchasable.kind_of?(Effective::Product) }.map do |oi|
|
203
|
-
|
210
|
+
purchasable = oi.purchasable
|
211
|
+
|
212
|
+
product = Effective::Product.new(name: purchasable.purchasable_name, price: purchasable.price, tax_exempt: purchasable.tax_exempt)
|
213
|
+
|
214
|
+
# Copy over any extended attributes that may have been created
|
215
|
+
atts = purchasable.dup.attributes.except('name', 'price', 'tax_exempt', 'purchased_order_id').compact
|
216
|
+
|
217
|
+
atts.each do |k, v|
|
218
|
+
next unless product.respond_to?("#{k}=") && product.respond_to?(k)
|
219
|
+
product.send("#{k}=", v) if product.send(k).blank?
|
220
|
+
end
|
221
|
+
|
204
222
|
Effective::CartItem.new(quantity: oi.quantity, purchasable: product)
|
205
223
|
end
|
206
224
|
else
|
@@ -278,6 +296,10 @@ module Effective
|
|
278
296
|
[card, '-', last4].compact.join(' ')
|
279
297
|
end
|
280
298
|
|
299
|
+
def duplicate
|
300
|
+
Effective::Order.new(self)
|
301
|
+
end
|
302
|
+
|
281
303
|
# For moneris and moneris_checkout. Just a unique value.
|
282
304
|
def transaction_id
|
283
305
|
[to_param, billing_name.to_s.parameterize.presence, Time.zone.now.to_i].compact.join('-')
|
@@ -313,6 +335,10 @@ module Effective
|
|
313
335
|
state == EffectiveOrders::DECLINED
|
314
336
|
end
|
315
337
|
|
338
|
+
def abandoned?
|
339
|
+
state == EffectiveOrders::ABANDONED
|
340
|
+
end
|
341
|
+
|
316
342
|
def purchasables
|
317
343
|
order_items.map { |order_item| order_item.purchasable }
|
318
344
|
end
|
@@ -345,6 +371,14 @@ module Effective
|
|
345
371
|
order_items.map { |oi| oi.quantity }.sum
|
346
372
|
end
|
347
373
|
|
374
|
+
def send_order_receipt_to_admin?
|
375
|
+
EffectiveOrders.mailer[:send_order_receipt_to_admin] && !free?
|
376
|
+
end
|
377
|
+
|
378
|
+
def send_order_receipt_to_buyer?
|
379
|
+
EffectiveOrders.mailer[:send_order_receipt_to_buyer] && !free?
|
380
|
+
end
|
381
|
+
|
348
382
|
def send_payment_request_to_buyer?
|
349
383
|
EffectiveResources.truthy?(send_payment_request_to_buyer) && !free? && !refund?
|
350
384
|
end
|
@@ -425,11 +459,7 @@ module Effective
|
|
425
459
|
def defer!(provider: 'none', email: true)
|
426
460
|
return false if purchased?
|
427
461
|
|
428
|
-
assign_attributes(
|
429
|
-
state: EffectiveOrders::DEFERRED,
|
430
|
-
payment_provider: provider
|
431
|
-
)
|
432
|
-
|
462
|
+
assign_attributes(state: EffectiveOrders::DEFERRED, payment_provider: provider)
|
433
463
|
save!
|
434
464
|
|
435
465
|
send_payment_request_to_buyer! if email
|
@@ -477,8 +507,8 @@ module Effective
|
|
477
507
|
end
|
478
508
|
|
479
509
|
def send_order_receipts!
|
480
|
-
send_order_receipt_to_admin! if
|
481
|
-
send_order_receipt_to_buyer! if
|
510
|
+
send_order_receipt_to_admin! if send_order_receipt_to_admin?
|
511
|
+
send_order_receipt_to_buyer! if send_order_receipt_to_buyer?
|
482
512
|
send_refund_notification! if refund?
|
483
513
|
end
|
484
514
|
|
@@ -562,6 +592,23 @@ module Effective
|
|
562
592
|
end
|
563
593
|
end
|
564
594
|
|
595
|
+
def assign_user_address
|
596
|
+
return unless user.present?
|
597
|
+
return unless (EffectiveOrders.billing_address || EffectiveOrders.shipping_address)
|
598
|
+
return if EffectiveOrders.billing_address && billing_address.present?
|
599
|
+
return if EffectiveOrders.shipping_address && shipping_address.present?
|
600
|
+
|
601
|
+
if billing_address.blank? && user.respond_to?(:billing_address) && user.billing_address.present?
|
602
|
+
self.billing_address = user.billing_address
|
603
|
+
self.billing_address.full_name ||= user.to_s.presence
|
604
|
+
end
|
605
|
+
|
606
|
+
if shipping_address.blank? && user.respond_to?(:shipping_address) && user.shipping_address.present?
|
607
|
+
self.shipping_address = user.shipping_address
|
608
|
+
self.shipping_address.full_name ||= user.to_s.presence
|
609
|
+
end
|
610
|
+
end
|
611
|
+
|
565
612
|
def update_purchasables_purchased_order!
|
566
613
|
order_items.each { |oi| oi.purchasable&.update_column(:purchased_order_id, self.id) }
|
567
614
|
end
|
@@ -1,9 +1,14 @@
|
|
1
1
|
.card
|
2
2
|
.card-body
|
3
|
-
%h2
|
3
|
+
%h2
|
4
|
+
Admin:
|
5
|
+
= order.refund? ? 'Complete Refund' : 'Mark as Paid'
|
4
6
|
|
5
7
|
= effective_form_with(model: order, url: effective_orders.mark_as_paid_order_path(order), method: :post) do |f|
|
6
|
-
|
8
|
+
- if order.refund?
|
9
|
+
= f.hidden_field :purchased_at, value: Time.zone.now
|
10
|
+
- else
|
11
|
+
= f.date_field :purchased_at, required: true
|
7
12
|
|
8
13
|
= f.select :payment_provider, EffectiveOrders.payment_providers, required: true
|
9
14
|
|
@@ -21,4 +26,4 @@
|
|
21
26
|
|
22
27
|
= f.text_area :note_to_buyer, hint: 'This message will be displayed on the receipt.'
|
23
28
|
|
24
|
-
= f.submit order_checkout_label(:
|
29
|
+
= f.submit 'Admin: ' + order_checkout_label(order.refund? ? :refund : :mark_as_paid)
|
data/lib/effective_orders.rb
CHANGED
@@ -10,7 +10,16 @@ module EffectiveOrders
|
|
10
10
|
DEFERRED = 'deferred' # Deferred providers. Cheque or Phone was selected.
|
11
11
|
PURCHASED = 'purchased' # Purchased by provider
|
12
12
|
DECLINED = 'declined' # Declined by provider
|
13
|
-
|
13
|
+
ABANDONED = 'abandoned' # Not set by this gem. Can be set outside it.
|
14
|
+
|
15
|
+
STATES = {
|
16
|
+
PENDING => PENDING,
|
17
|
+
CONFIRMED => CONFIRMED,
|
18
|
+
DEFERRED => DEFERRED,
|
19
|
+
PURCHASED => PURCHASED,
|
20
|
+
DECLINED => DECLINED,
|
21
|
+
ABANDONED => ABANDONED
|
22
|
+
}
|
14
23
|
|
15
24
|
# Subscription statuses (as per stripe)
|
16
25
|
ACTIVE = 'active'
|
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: 5.1.
|
4
|
+
version: 5.1.9
|
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: 2021-
|
11
|
+
date: 2021-09-14 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|