effective_orders 5.8.2 → 5.9.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/app/controllers/effective/providers/refund.rb +1 -0
- data/app/datatables/admin/effective_orders_datatable.rb +4 -1
- data/app/models/concerns/acts_as_purchasable.rb +12 -0
- data/app/models/effective/order.rb +16 -2
- data/app/views/admin/orders/_datatable_actions.html.haml +1 -1
- data/app/views/admin/orders/_layout.html.haml +2 -0
- data/app/views/admin/orders/checkout.html.haml +3 -2
- data/app/views/admin/orders/edit.html.haml +12 -11
- data/app/views/admin/orders/index.html.haml +5 -4
- data/app/views/admin/orders/new.html.haml +3 -2
- data/app/views/admin/orders/show.html.haml +4 -3
- data/app/views/effective/orders/_layout.html.haml +2 -0
- data/app/views/effective/orders/_order_actions.html.haml +4 -3
- data/app/views/effective/orders/declined.html.haml +9 -8
- data/app/views/effective/orders/deferred.html.haml +9 -8
- data/app/views/effective/orders/edit.html.haml +3 -2
- data/app/views/effective/orders/index.html.haml +3 -2
- data/app/views/effective/orders/mark_as_paid/_form.html.haml +3 -2
- data/app/views/effective/orders/new.html.haml +3 -2
- data/app/views/effective/orders/purchased.html.haml +7 -6
- data/app/views/effective/orders/refund/_form.html.haml +9 -4
- data/app/views/effective/orders/show.html.haml +8 -7
- data/config/effective_orders.rb +22 -4
- data/lib/effective_orders/version.rb +1 -1
- data/lib/effective_orders.rb +6 -1
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 460e5652f16e49b5751f29cecd6d1cd41f8b92c5d9cb10d36f8f7f863fad9ca5
|
4
|
+
data.tar.gz: d2f4c23a86b09022a38779718232ebe2b5226c5e1ca03b9286a6cf6a3504564e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: cee63481230c23907ef97547657e402d566b09c0f030fb4bae984608f352ca9a7715beedf5ccc6b7cba9e0f3ef96c4f550dd55d9ca50d57d7051a3e173316143
|
7
|
+
data.tar.gz: fee709031224ca9818f454f73c7781dfb1259ec1bca86938b6f31450f3d1dddb2d71ae1521ad8fc7d026c405cac078fe5cb81ab1a6a18b7b1c309a241c2d0e2e
|
@@ -19,6 +19,8 @@ class Admin::EffectiveOrdersDatatable < Effective::Datatable
|
|
19
19
|
scope :purchased
|
20
20
|
|
21
21
|
scope :deferred if EffectiveOrders.deferred_providers.present?
|
22
|
+
|
23
|
+
scope :pending_refunds if EffectiveOrders.refund && !EffectiveOrders.buyer_purchases_refund?
|
22
24
|
scope :refunds if EffectiveOrders.refund
|
23
25
|
|
24
26
|
scope :not_purchased
|
@@ -38,7 +40,7 @@ class Admin::EffectiveOrdersDatatable < Effective::Datatable
|
|
38
40
|
end
|
39
41
|
|
40
42
|
col :purchased_at do |order|
|
41
|
-
order.purchased_at&.strftime('%F %H:%M') || 'not purchased'
|
43
|
+
order.purchased_at&.strftime('%F %H:%M') || ('pending refund' if order.pending_refund?) || ("pending #{order.payment_provider}" if order.deferred?) || 'not purchased'
|
42
44
|
end
|
43
45
|
|
44
46
|
if attributes[:user_id].blank?
|
@@ -64,6 +66,7 @@ class Admin::EffectiveOrdersDatatable < Effective::Datatable
|
|
64
66
|
end
|
65
67
|
|
66
68
|
col :payment_method
|
69
|
+
col :payment_provider
|
67
70
|
|
68
71
|
col :subtotal, as: :price, visible: false
|
69
72
|
col :tax, as: :price, visible: false
|
@@ -1,3 +1,15 @@
|
|
1
|
+
# Acts as purchasable
|
2
|
+
# Add to your model:
|
3
|
+
# t.integer :purchased_order_id
|
4
|
+
# t.integer :price
|
5
|
+
# t.boolean :tax_exempt, default: false
|
6
|
+
# t.string :qb_item_name
|
7
|
+
# or
|
8
|
+
# add_column :resources, :purchased_order_id, :integer
|
9
|
+
# add_column :resources, :price, :integer
|
10
|
+
# add_column :resources, :tax_exempt, :boolean, default: false
|
11
|
+
# add_column :resources, :qb_item_name, :string
|
12
|
+
|
1
13
|
module ActsAsPurchasable
|
2
14
|
extend ActiveSupport::Concern
|
3
15
|
|
@@ -75,7 +75,9 @@ module Effective
|
|
75
75
|
scope :deferred, -> { where(state: EffectiveOrders::DEFERRED) }
|
76
76
|
scope :declined, -> { where(state: EffectiveOrders::DECLINED) }
|
77
77
|
scope :abandoned, -> { where(state: EffectiveOrders::ABANDONED) }
|
78
|
+
|
78
79
|
scope :refunds, -> { purchased.where('total < ?', 0) }
|
80
|
+
scope :pending_refunds, -> { not_purchased.where('total < ?', 0) }
|
79
81
|
|
80
82
|
before_validation do
|
81
83
|
self.state ||= EffectiveOrders::PENDING
|
@@ -445,6 +447,13 @@ module Effective
|
|
445
447
|
total.to_i < 0
|
446
448
|
end
|
447
449
|
|
450
|
+
def pending_refund?
|
451
|
+
return false if EffectiveOrders.buyer_purchases_refund?
|
452
|
+
return false if purchased?
|
453
|
+
|
454
|
+
refund?
|
455
|
+
end
|
456
|
+
|
448
457
|
def num_items
|
449
458
|
present_order_items.map { |oi| oi.quantity }.sum
|
450
459
|
end
|
@@ -466,6 +475,11 @@ module Effective
|
|
466
475
|
EffectiveResources.truthy?(send_payment_request_to_buyer)
|
467
476
|
end
|
468
477
|
|
478
|
+
def send_refund_notification_to_admin?
|
479
|
+
return false unless refund?
|
480
|
+
EffectiveOrders.send_refund_notification_to_admin
|
481
|
+
end
|
482
|
+
|
469
483
|
def send_mark_as_paid_email_to_buyer?
|
470
484
|
EffectiveResources.truthy?(send_mark_as_paid_email_to_buyer)
|
471
485
|
end
|
@@ -622,7 +636,7 @@ module Effective
|
|
622
636
|
def send_order_receipts!
|
623
637
|
send_order_receipt_to_admin! if send_order_receipt_to_admin?
|
624
638
|
send_order_receipt_to_buyer! if send_order_receipt_to_buyer?
|
625
|
-
send_refund_notification! if
|
639
|
+
send_refund_notification! if send_refund_notification_to_admin?
|
626
640
|
end
|
627
641
|
|
628
642
|
def send_order_receipt_to_admin!
|
@@ -642,7 +656,7 @@ module Effective
|
|
642
656
|
end
|
643
657
|
|
644
658
|
def send_refund_notification!
|
645
|
-
EffectiveOrders.send_email(:refund_notification_to_admin, self) if
|
659
|
+
EffectiveOrders.send_email(:refund_notification_to_admin, self) if refund?
|
646
660
|
end
|
647
661
|
|
648
662
|
protected
|
@@ -8,7 +8,7 @@
|
|
8
8
|
= dropdown_link_to 'Email receipt to buyer', effective_orders.send_buyer_receipt_order_path(order),
|
9
9
|
data: { method: :post, confirm: "Send receipt to #{order.emails_send_to}?" }
|
10
10
|
|
11
|
-
- if order.pending? || order.confirmed? || order.deferred?
|
11
|
+
- if (order.pending? || order.confirmed? || order.deferred?) && !order.refund?
|
12
12
|
= dropdown_link_to 'Email request for payment to buyer', effective_orders.send_payment_request_admin_order_path(order),
|
13
13
|
data: { method: :post, confirm: "Send request for payment to #{order.emails_send_to}?" }
|
14
14
|
|
@@ -1,3 +1,4 @@
|
|
1
|
-
|
1
|
+
= render 'layout' do
|
2
|
+
%h1.effective-admin-heading= @page_title
|
2
3
|
|
3
|
-
= render_checkout(@order, namespace: :admin, purchased_url: effective_orders.admin_order_path(@order), declined_url: effective_orders.admin_order_path(@order))
|
4
|
+
= render_checkout(@order, namespace: :admin, purchased_url: effective_orders.admin_order_path(@order), declined_url: effective_orders.admin_order_path(@order))
|
@@ -1,15 +1,16 @@
|
|
1
|
-
|
1
|
+
= render 'layout' do
|
2
|
+
%h1.effective-admin-heading= @page_title
|
2
3
|
|
3
|
-
- if @order.custom_order? && @order.in_progress?
|
4
|
-
|
4
|
+
- if @order.custom_order? && @order.in_progress?
|
5
|
+
= render 'effective/orders/order_actions', order: @order
|
5
6
|
|
6
|
-
|
7
|
-
|
8
|
-
|
7
|
+
.mb-4
|
8
|
+
= collapse('show order') do
|
9
|
+
= render 'effective/orders/order', order: @order, no_order_actions: true
|
9
10
|
|
10
|
-
|
11
|
+
= render 'admin/orders/form', order: @order
|
11
12
|
|
12
|
-
- else
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
- else
|
14
|
+
- # Same as the show action
|
15
|
+
= render 'effective/orders/order', order: @order
|
16
|
+
= render 'admin/orders/form_note_internal', order: @order
|
@@ -1,6 +1,7 @@
|
|
1
|
-
|
1
|
+
= render 'layout' do
|
2
|
+
%h1.effective-admin-heading= @page_title
|
2
3
|
|
3
|
-
%p.text-right.effective-admin-actions
|
4
|
-
|
4
|
+
%p.text-right.effective-admin-actions
|
5
|
+
= link_to 'New Order', effective_orders.new_admin_order_path, class: 'btn btn-primary'
|
5
6
|
|
6
|
-
= render_datatable @datatable
|
7
|
+
= render_datatable @datatable
|
@@ -1,4 +1,5 @@
|
|
1
|
-
|
1
|
+
= render 'layout' do
|
2
|
+
%h1.effective-admin-heading= @page_title
|
2
3
|
|
3
|
-
= render 'effective/orders/order', order: @order
|
4
|
-
= render 'admin/orders/form_note_internal', order: @order
|
4
|
+
= render 'effective/orders/order', order: @order
|
5
|
+
= render 'admin/orders/form_note_internal', order: @order
|
@@ -15,9 +15,10 @@
|
|
15
15
|
- if params[:action] == 'edit'
|
16
16
|
= link_to('Show', effective_orders.admin_order_path(order), class: 'btn btn-primary')
|
17
17
|
|
18
|
-
|
19
|
-
|
20
|
-
|
18
|
+
- unless order.refund?
|
19
|
+
= link_to 'Email request for payment to buyer', effective_orders.send_payment_request_admin_order_path(order),
|
20
|
+
class: 'btn btn-secondary',
|
21
|
+
data: { method: :post, confirm: "Send request for payment to #{order.emails_send_to}?" }
|
21
22
|
|
22
23
|
= link_to 'Delete', effective_orders.admin_order_path(order),
|
23
24
|
class: 'btn btn-danger',
|
@@ -1,10 +1,11 @@
|
|
1
|
-
|
1
|
+
= render 'layout' do
|
2
|
+
%h1.effective-heading= @page_title
|
2
3
|
|
3
|
-
%p.effective-orders-page-content
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
4
|
+
%p.effective-orders-page-content
|
5
|
+
- if current_cart.present?
|
6
|
+
Your #{link_to_current_cart(label: 'Cart')} items have been saved. Please try again.
|
7
|
+
- else
|
8
|
+
Please try again.
|
8
9
|
|
9
|
-
%p.text-center
|
10
|
-
|
10
|
+
%p.text-center
|
11
|
+
= link_to 'Continue', root_path, class: 'btn btn-primary'
|
@@ -1,11 +1,12 @@
|
|
1
|
-
|
1
|
+
= render 'layout' do
|
2
|
+
%h1.effective-heading= @page_title
|
2
3
|
|
3
|
-
%p.effective-orders-page-content
|
4
|
-
|
5
|
-
|
6
|
-
|
4
|
+
%p.effective-orders-page-content
|
5
|
+
You have indicated that this order will be paid by #{@order.payment_provider}.
|
6
|
+
Your order will not be considered purchased until we receive your payment.
|
7
|
+
Please contact us at your earliest convenience.
|
7
8
|
|
8
|
-
= render @order
|
9
|
+
= render @order
|
9
10
|
|
10
|
-
%p.text-center
|
11
|
-
|
11
|
+
%p.text-center
|
12
|
+
= link_to 'Continue', root_path, class: 'btn btn-primary'
|
@@ -13,7 +13,7 @@
|
|
13
13
|
label: 'Payment card type, cheque, e-transfer or transaction number',
|
14
14
|
hint: 'Do not enter credit card numbers here, or anywhere.'
|
15
15
|
|
16
|
-
= f.datetime_field :purchased_at
|
16
|
+
= f.datetime_field :purchased_at, label: 'Purchased or completed'
|
17
17
|
|
18
18
|
= f.check_box :send_mark_as_paid_email_to_buyer,
|
19
19
|
label: 'Yes, send a receipt email to the buyer.',
|
@@ -25,4 +25,5 @@
|
|
25
25
|
.col
|
26
26
|
= f.text_area :note_internal, hint: 'For or internal admin use only. This note will never be displayed to the buyer.'
|
27
27
|
|
28
|
-
= f.submit
|
28
|
+
= f.submit(center: true) do
|
29
|
+
= f.save(order.refund? ? 'Complete Refund' : 'Mark as Paid')
|
@@ -1,9 +1,10 @@
|
|
1
|
-
|
1
|
+
= render 'layout' do
|
2
|
+
%h1.effective-heading= @page_title
|
2
3
|
|
3
|
-
%p.effective-orders-page-content
|
4
|
-
|
4
|
+
%p.effective-orders-page-content
|
5
|
+
You have successfully purchased the following:
|
5
6
|
|
6
|
-
= render @order
|
7
|
+
= render @order
|
7
8
|
|
8
|
-
%p.text-center
|
9
|
-
|
9
|
+
%p.text-center
|
10
|
+
= link_to 'Continue', root_path, class: 'btn btn-primary'
|
@@ -1,5 +1,10 @@
|
|
1
|
-
|
2
|
-
=
|
3
|
-
|
1
|
+
- if EffectiveOrders.buyer_purchases_refund?
|
2
|
+
= effective_form_with(scope: :refund, url: effective_orders.refund_order_path(order), method: :post) do |f|
|
3
|
+
= f.hidden_field :purchased_url, value: purchased_url
|
4
|
+
= f.hidden_field :declined_url, value: declined_url
|
4
5
|
|
5
|
-
|
6
|
+
= f.submit order_checkout_label(:refund), center: true, border: false
|
7
|
+
|
8
|
+
- else
|
9
|
+
.text-center
|
10
|
+
= EffectiveOrders.refund[:pending].presence || 'Refund pending'
|
@@ -1,9 +1,10 @@
|
|
1
|
-
|
1
|
+
= render 'layout' do
|
2
|
+
%h1.effective-heading= @page_title
|
2
3
|
|
3
|
-
- if !@order.purchased? && @order.user == current_user
|
4
|
-
|
5
|
-
- else
|
6
|
-
|
4
|
+
- if !@order.purchased? && @order.user == current_user
|
5
|
+
= render_checkout(@order)
|
6
|
+
- else
|
7
|
+
= render(@order)
|
7
8
|
|
8
|
-
|
9
|
-
|
9
|
+
%p.text-center
|
10
|
+
= link_to 'Continue', effective_orders.orders_path, class: 'btn btn-primary'
|
data/config/effective_orders.rb
CHANGED
@@ -95,6 +95,8 @@ EffectiveOrders.setup do |config|
|
|
95
95
|
config.send_payment_request_to_buyer = true
|
96
96
|
config.send_pending_order_invoice_to_buyer = true
|
97
97
|
|
98
|
+
config.send_refund_notification_to_admin = true
|
99
|
+
|
98
100
|
config.send_order_receipts_when_mark_as_paid = true
|
99
101
|
config.send_order_receipts_when_free = true
|
100
102
|
|
@@ -201,17 +203,33 @@ EffectiveOrders.setup do |config|
|
|
201
203
|
# success: 'Thank you! You have indicated that this order will be purchased by phone. Please give us a call at your earliest convenience.'
|
202
204
|
# }
|
203
205
|
|
204
|
-
|
205
206
|
# Refunds
|
206
207
|
# This does not issue a refund with the payment processor at all.
|
207
|
-
#
|
208
|
-
#
|
208
|
+
#
|
209
|
+
# The historic way of doing refunds was the user would click Accept Refund
|
210
|
+
# Which marks the order as purchased and sends an admin the notification to issue a refund with processor
|
211
|
+
# To support this, set:
|
212
|
+
# config.buyer_purchases_refund = true
|
213
|
+
# config.send_refund_notification_to_admin = true
|
214
|
+
#
|
215
|
+
# The newer way of doing refunds is driven by the admin
|
216
|
+
# The user just sees a pending refund and cannot purchase the order
|
217
|
+
# The admin does the refund with processor, then uses Admin: Mark as Paid to mark order as purchased thereby completing the refund
|
218
|
+
# To support this, set:
|
219
|
+
# config.buyer_purchases_refund = false
|
220
|
+
# config.send_refund_notification_to_admin = false
|
221
|
+
#
|
222
|
+
# You can call order.send_refund_notification! directly or implement a better one in your app
|
209
223
|
config.refund = false
|
210
224
|
|
211
225
|
# config.refund = {
|
212
|
-
# success: 'Thank you! Your refund will be processed in the next few business days.'
|
226
|
+
# success: 'Thank you! Your refund will be processed in the next few business days.',
|
227
|
+
# pending: 'Thank you! Your refund will be processed in the next few business days.'
|
213
228
|
# }
|
214
229
|
|
230
|
+
config.buyer_purchases_refund = true
|
231
|
+
config.send_refund_notification_to_admin = true # On Purchase
|
232
|
+
|
215
233
|
# Stripe
|
216
234
|
config.stripe = false
|
217
235
|
|
data/lib/effective_orders.rb
CHANGED
@@ -48,9 +48,10 @@ module EffectiveOrders
|
|
48
48
|
:send_order_receipts_when_mark_as_paid, :send_order_receipts_when_free,
|
49
49
|
:send_subscription_events,
|
50
50
|
:send_subscription_trialing, :send_subscription_trial_expired,
|
51
|
+
:send_refund_notification_to_admin,
|
51
52
|
|
52
53
|
# Features
|
53
|
-
:free_enabled, :mark_as_paid_enabled, :pretend_enabled, :pretend_message,
|
54
|
+
:free_enabled, :mark_as_paid_enabled, :pretend_enabled, :pretend_message, :buyer_purchases_refund,
|
54
55
|
|
55
56
|
# Payment processors. false or Hash
|
56
57
|
:cheque, :etransfer, :moneris, :moneris_checkout, :paypal, :phone, :refund, :stripe, :subscriptions, :trial
|
@@ -112,6 +113,10 @@ module EffectiveOrders
|
|
112
113
|
refund.kind_of?(Hash)
|
113
114
|
end
|
114
115
|
|
116
|
+
def self.buyer_purchases_refund?
|
117
|
+
buyer_purchases_refund == true
|
118
|
+
end
|
119
|
+
|
115
120
|
def self.stripe?
|
116
121
|
stripe.kind_of?(Hash)
|
117
122
|
end
|
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.
|
4
|
+
version: 5.9.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: 2022-
|
11
|
+
date: 2022-11-09 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -236,6 +236,7 @@ files:
|
|
236
236
|
- app/views/admin/orders/_datatable_actions.html.haml
|
237
237
|
- app/views/admin/orders/_form.html.haml
|
238
238
|
- app/views/admin/orders/_form_note_internal.html.haml
|
239
|
+
- app/views/admin/orders/_layout.html.haml
|
239
240
|
- app/views/admin/orders/_order_actions.html.haml
|
240
241
|
- app/views/admin/orders/_order_item_fields.html.haml
|
241
242
|
- app/views/admin/orders/checkout.html.haml
|
@@ -257,6 +258,7 @@ files:
|
|
257
258
|
- app/views/effective/orders/_fields.html.haml
|
258
259
|
- app/views/effective/orders/_fields_note.html.haml
|
259
260
|
- app/views/effective/orders/_fields_terms.html.haml
|
261
|
+
- app/views/effective/orders/_layout.html.haml
|
260
262
|
- app/views/effective/orders/_order.html.haml
|
261
263
|
- app/views/effective/orders/_order_actions.html.haml
|
262
264
|
- app/views/effective/orders/_order_deferred.html.haml
|