effective_orders 1.8.1 → 2.0.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.
- checksums.yaml +4 -4
- data/MIT-LICENSE +1 -1
- data/README.md +150 -60
- data/Rakefile +0 -3
- data/active_admin/effective_orders.rb +14 -9
- data/app/assets/javascripts/effective_orders.js +2 -0
- data/app/assets/javascripts/effective_orders/{stripe_charges.js.coffee → providers/stripe_charges.js.coffee} +1 -1
- data/app/assets/javascripts/effective_orders/{stripe_subscriptions.js.coffee → providers/stripe_subscriptions.js.coffee} +1 -1
- data/app/assets/stylesheets/effective_orders/_order.scss +9 -3
- data/app/controllers/admin/orders_controller.rb +87 -3
- data/app/controllers/concerns/acts_as_active_admin_controller.rb +2 -1
- data/app/controllers/effective/carts_controller.rb +4 -2
- data/app/controllers/effective/orders_controller.rb +101 -60
- data/app/controllers/effective/providers/app_checkout.rb +10 -2
- data/app/controllers/effective/providers/ccbill.rb +34 -0
- data/app/controllers/effective/providers/cheque.rb +30 -0
- data/app/controllers/effective/providers/moneris.rb +7 -7
- data/app/controllers/effective/providers/paypal.rb +7 -5
- data/app/controllers/effective/providers/pretend.rb +22 -0
- data/app/controllers/effective/providers/stripe.rb +26 -24
- data/app/controllers/effective/webhooks_controller.rb +1 -1
- data/app/helpers/effective_carts_helper.rb +59 -29
- data/app/helpers/effective_ccbill_helper.rb +25 -0
- data/app/helpers/effective_orders_helper.rb +50 -41
- data/app/helpers/effective_paypal_helper.rb +11 -11
- data/app/mailers/effective/orders_mailer.rb +95 -20
- data/app/models/concerns/acts_as_purchasable.rb +14 -22
- data/app/models/effective/cart.rb +9 -15
- data/app/models/effective/cart_item.rb +15 -13
- data/app/models/effective/customer.rb +9 -9
- data/app/models/effective/datatables/order_items.rb +14 -8
- data/app/models/effective/datatables/orders.rb +56 -69
- data/app/models/effective/order.rb +250 -139
- data/app/models/effective/order_item.rb +23 -16
- data/app/models/effective/product.rb +23 -0
- data/app/models/effective/providers/ccbill_postback.rb +85 -0
- data/app/models/effective/{stripe_charge.rb → providers/stripe_charge.rb} +1 -1
- data/app/models/effective/subscription.rb +16 -12
- data/app/models/effective/tax_rate_calculator.rb +45 -0
- data/app/views/admin/customers/index.html.haml +2 -5
- data/app/views/admin/order_items/index.html.haml +2 -5
- data/app/views/admin/orders/_actions.html.haml +2 -0
- data/app/views/admin/orders/_form.html.haml +28 -0
- data/app/views/admin/orders/_order_item_fields.html.haml +9 -0
- data/app/views/admin/orders/index.html.haml +9 -5
- data/app/views/admin/orders/new.html.haml +3 -0
- data/app/views/effective/carts/_cart.html.haml +3 -12
- data/app/views/effective/carts/_cart_actions.html.haml +4 -0
- data/app/views/effective/carts/show.html.haml +10 -12
- data/app/views/effective/orders/_checkout_step1.html.haml +46 -0
- data/app/views/effective/orders/_checkout_step2.html.haml +33 -0
- data/app/views/effective/orders/_order.html.haml +2 -0
- data/app/views/effective/orders/_order_actions.html.haml +10 -5
- data/app/views/effective/orders/_order_footer.html.haml +1 -0
- data/app/views/effective/orders/_order_items.html.haml +11 -9
- data/app/views/effective/orders/_order_note.html.haml +8 -0
- data/app/views/effective/orders/_order_note_fields.html.haml +5 -0
- data/app/views/effective/orders/_order_shipping.html.haml +4 -4
- data/app/views/effective/orders/_order_user_fields.html.haml +1 -0
- data/app/views/effective/orders/_orders_table.html.haml +27 -0
- data/app/views/effective/orders/ccbill/_form.html.haml +24 -0
- data/app/views/effective/orders/checkout_step1.html.haml +3 -0
- data/app/views/effective/orders/checkout_step2.html.haml +3 -0
- data/app/views/effective/orders/cheque/_form.html.haml +2 -0
- data/app/views/effective/orders/cheque/pay_by_cheque.html.haml +9 -0
- data/app/views/effective/orders/declined.html.haml +4 -2
- data/app/views/effective/orders/my_purchases.html.haml +1 -1
- data/app/views/effective/orders/my_sales.html.haml +1 -1
- data/app/views/effective/orders/purchased.html.haml +3 -2
- data/app/views/effective/orders/show.html.haml +1 -1
- data/app/views/effective/orders/stripe/_form.html.haml +5 -5
- data/app/views/effective/orders_mailer/order_error.html.haml +11 -0
- data/app/views/effective/orders_mailer/payment_request_to_buyer.html.haml +13 -0
- data/app/views/effective/orders_mailer/pending_order_invoice_to_buyer.html.haml +13 -0
- data/app/views/layouts/effective_orders_mailer_layout.html.haml +7 -7
- data/config/routes.rb +39 -24
- data/db/migrate/01_create_effective_orders.rb.erb +20 -1
- data/db/upgrade/03_upgrade_effective_orders_from1x.rb.erb +95 -0
- data/lib/effective_orders.rb +67 -9
- data/lib/effective_orders/app_checkout_service.rb +1 -2
- data/lib/effective_orders/engine.rb +46 -14
- data/lib/effective_orders/version.rb +1 -1
- data/lib/generators/effective_orders/install_generator.rb +1 -0
- data/lib/generators/effective_orders/upgrade_from03x_generator.rb +1 -0
- data/lib/generators/effective_orders/upgrade_from1x_generator.rb +31 -0
- data/lib/generators/templates/effective_orders.rb +131 -66
- data/lib/generators/templates/effective_orders_mailer_preview.rb +28 -13
- data/spec/controllers/admin/orders_controller_spec.rb +242 -0
- data/spec/controllers/ccbill_orders_controller_spec.rb +103 -0
- data/spec/controllers/moneris_orders_controller_spec.rb +23 -23
- data/spec/controllers/orders_controller_spec.rb +167 -79
- data/spec/controllers/stripe_orders_controller_spec.rb +7 -7
- data/spec/dummy/app/models/product.rb +0 -8
- data/spec/dummy/app/models/product_with_float_price.rb +0 -8
- data/spec/dummy/app/models/user.rb +2 -19
- data/spec/dummy/config/application.rb +2 -1
- data/spec/dummy/config/environments/test.rb +1 -0
- data/spec/dummy/config/initializers/effective_orders.rb +109 -64
- data/spec/dummy/db/schema.rb +15 -2
- data/spec/dummy/db/test.sqlite3 +0 -0
- data/spec/dummy/log/test.log +0 -258
- data/spec/models/acts_as_purchasable_spec.rb +8 -6
- data/spec/models/factories_spec.rb +7 -1
- data/spec/models/order_item_spec.rb +1 -1
- data/spec/models/order_spec.rb +165 -46
- data/spec/models/stripe_charge_spec.rb +5 -5
- data/spec/spec_helper.rb +2 -0
- data/spec/support/factories.rb +49 -33
- metadata +47 -64
- data/app/views/effective/orders/_checkout_step_1.html.haml +0 -43
- data/app/views/effective/orders/_checkout_step_2.html.haml +0 -25
- data/app/views/effective/orders/_my_purchases.html.haml +0 -17
- data/app/views/effective/orders/checkout.html.haml +0 -3
- data/app/views/effective/orders/new.html.haml +0 -4
- data/spec/dummy/log/development.log +0 -82
@@ -8,7 +8,7 @@ stripeCheckoutHandler = (key, form) ->
|
|
8
8
|
|
9
9
|
alert("An error ocurred when contacting Stripe. Your card has not been charged. Please refresh the page and try again. #{token.error.message}")
|
10
10
|
else
|
11
|
-
form.find('input#
|
11
|
+
form.find('input#effective_providers_stripe_charge_token').val('' + token['id'])
|
12
12
|
|
13
13
|
form.find("input[type='submit']").prop('disabled', true)
|
14
14
|
$('input[data-disable-with]').each -> try $.rails.disableFormElement($(this))
|
@@ -7,7 +7,7 @@ stripeCheckoutHandler = (key, form) ->
|
|
7
7
|
alert("An error ocurred when contacting Stripe. Your card has not been charged. Please refresh the page and try again. #{token.error.message}")
|
8
8
|
else
|
9
9
|
form.find("input[type='submit']").prop('disabled', true)
|
10
|
-
form.find('input#
|
10
|
+
form.find('input#effective_providers_stripe_subscription_token').val('' + token['id'])
|
11
11
|
form.submit()
|
12
12
|
|
13
13
|
$(document).on 'click', "#effective-orders-new-subscription-form form input[type='submit']", (event) ->
|
@@ -1,7 +1,6 @@
|
|
1
1
|
.effective-order {
|
2
2
|
table {
|
3
3
|
clear: both;
|
4
|
-
width: 600px;
|
5
4
|
margin-bottom: 25px;
|
6
5
|
|
7
6
|
tfoot {
|
@@ -42,8 +41,15 @@
|
|
42
41
|
}
|
43
42
|
}
|
44
43
|
|
44
|
+
form.new_effective_order {
|
45
|
+
.checkbox { margin-top: 30px; }
|
46
|
+
.remove-nested-fields { margin-top: 30px; }
|
47
|
+
a.remove_fields.dynamic { float: right; }
|
48
|
+
}
|
49
|
+
|
45
50
|
@media print {
|
51
|
+
.effective-orders-page-title { display: none; }
|
52
|
+
.effective-orders-page-content { display: none; }
|
53
|
+
.effective-order-actions { display: none; }
|
46
54
|
.effective-order-purchase-actions { display: none; }
|
47
|
-
.print-button { display: none; }
|
48
|
-
.resend-receipt-button { display: none; }
|
49
55
|
}
|
@@ -8,15 +8,99 @@ module Admin
|
|
8
8
|
@datatable = Effective::Datatables::Orders.new() if defined?(EffectiveDatatables)
|
9
9
|
@page_title = 'Orders'
|
10
10
|
|
11
|
-
|
12
|
-
EffectiveOrders.authorized?(self, :index, Effective::Order)
|
11
|
+
authorize_effective_order!
|
13
12
|
end
|
14
13
|
|
15
14
|
def show
|
16
15
|
@order = Effective::Order.find(params[:id])
|
17
16
|
@page_title = "Order ##{@order.to_param}"
|
18
17
|
|
19
|
-
|
18
|
+
authorize_effective_order!
|
19
|
+
end
|
20
|
+
|
21
|
+
def new
|
22
|
+
@order = Effective::Order.new
|
23
|
+
@page_title = 'New Order'
|
24
|
+
|
25
|
+
authorize_effective_order!
|
26
|
+
end
|
27
|
+
|
28
|
+
def create
|
29
|
+
@user = User.find_by_id(order_params[:user_id])
|
30
|
+
@order = Effective::Order.new(user: @user)
|
31
|
+
@order.send_payment_request_to_buyer = order_params[:send_payment_request_to_buyer]
|
32
|
+
|
33
|
+
authorize_effective_order!
|
34
|
+
|
35
|
+
if order_params[:order_items_attributes].present?
|
36
|
+
order_params[:order_items_attributes].each do |_, item_attrs|
|
37
|
+
purchasable = Effective::Product.new(item_attrs[:purchasable_attributes])
|
38
|
+
@order.add(purchasable, quantity: item_attrs[:quantity])
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
if @order.create_as_pending
|
43
|
+
path_for_redirect = params[:commit] == 'Save and Add New' ? effective_orders.new_admin_order_path : effective_orders.admin_order_path(@order)
|
44
|
+
message = 'Successfully created order'
|
45
|
+
message << ". #{@order.user.email} has been sent a request for payment." if @order.send_payment_request_to_buyer?
|
46
|
+
flash[:success] = message
|
47
|
+
redirect_to path_for_redirect
|
48
|
+
else
|
49
|
+
@page_title = 'New Order'
|
50
|
+
flash.now[:danger] = 'Unable to create order'
|
51
|
+
render :new
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
def mark_as_paid
|
56
|
+
@order = Effective::Order.find(params[:id])
|
57
|
+
authorize_effective_order!
|
58
|
+
|
59
|
+
purchased = @order.purchase!(
|
60
|
+
details: 'Marked as paid by admin',
|
61
|
+
provider: 'admin',
|
62
|
+
card: 'none',
|
63
|
+
email: EffectiveOrders.mailer[:send_order_receipts_when_marked_paid_by_admin],
|
64
|
+
skip_buyer_validations: true # This will allow a declined order to be marked purchased
|
65
|
+
)
|
66
|
+
|
67
|
+
if purchased
|
68
|
+
flash[:success] = 'Order marked as paid successfully'
|
69
|
+
redirect_to effective_orders.admin_order_path(@order)
|
70
|
+
else
|
71
|
+
flash[:danger] = 'Unable to mark order as paid'
|
72
|
+
request.referrer ? (redirect_to :back) : (redirect_to effective_orders.admin_orders_path)
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
def send_payment_request
|
77
|
+
@order = Effective::Order.find(params[:id])
|
78
|
+
authorize_effective_order!
|
79
|
+
|
80
|
+
if @order.send_payment_request_to_buyer!
|
81
|
+
flash[:success] = "Successfully sent payment request to #{@order.user.email}"
|
82
|
+
else
|
83
|
+
flash[:danger] = 'Unable to send payment request'
|
84
|
+
end
|
85
|
+
|
86
|
+
request.referrer ? (redirect_to :back) : (redirect_to effective_orders.admin_order_path(@order))
|
87
|
+
end
|
88
|
+
|
89
|
+
private
|
90
|
+
|
91
|
+
def order_params
|
92
|
+
params.require(:effective_order).permit(:user_id, :send_payment_request_to_buyer,
|
93
|
+
order_items_attributes: [
|
94
|
+
:quantity, :_destroy, purchasable_attributes: [
|
95
|
+
:title, :price, :tax_exempt
|
96
|
+
]
|
97
|
+
]
|
98
|
+
)
|
99
|
+
end
|
100
|
+
|
101
|
+
def authorize_effective_order!
|
102
|
+
EffectiveOrders.authorized?(self, :admin, :effective_orders)
|
103
|
+
EffectiveOrders.authorized?(self, action_name.to_sym, @order || Effective::Order)
|
20
104
|
end
|
21
105
|
|
22
106
|
end
|
@@ -27,9 +27,10 @@ module ActsAsActiveAdminController
|
|
27
27
|
self.send(:define_method, :resource_path) { |resource| effective_orders.cart_path }
|
28
28
|
else
|
29
29
|
self.send(:define_method, :resource_path) { |resource| public_send(resource_path, resource) }
|
30
|
+
self.send(:define_method, :edit_resource_path) { |resource| effective_orders.edit_order_path(resource) }
|
30
31
|
end
|
31
32
|
|
32
|
-
helper_method :resource, :resource_path
|
33
|
+
helper_method :resource, :resource_path, :edit_resource_path
|
33
34
|
end
|
34
35
|
|
35
36
|
module ClassMethods
|
@@ -6,7 +6,9 @@ module Effective
|
|
6
6
|
|
7
7
|
def show
|
8
8
|
@cart = current_cart
|
9
|
-
@
|
9
|
+
@pending_orders = Effective::Order.pending.where(user: current_user) if current_user.present?
|
10
|
+
|
11
|
+
@page_title ||= 'My Cart'
|
10
12
|
EffectiveOrders.authorized?(self, :show, @cart)
|
11
13
|
end
|
12
14
|
|
@@ -32,7 +34,7 @@ module Effective
|
|
32
34
|
begin
|
33
35
|
raise "Please select a valid #{add_to_cart_params[:purchasable_type] || 'item' }." unless @purchasable
|
34
36
|
|
35
|
-
current_cart.add_to_cart(@purchasable, [add_to_cart_params[:quantity].to_i, 1].max)
|
37
|
+
current_cart.add_to_cart(@purchasable, quantity: [add_to_cart_params[:quantity].to_i, 1].max)
|
36
38
|
flash[:success] = 'Successfully added item to cart.'
|
37
39
|
rescue EffectiveOrders::SoldOutException
|
38
40
|
flash[:warning] = 'This item is sold out.'
|
@@ -2,20 +2,28 @@ module Effective
|
|
2
2
|
class OrdersController < ApplicationController
|
3
3
|
include EffectiveCartsHelper
|
4
4
|
|
5
|
+
include Providers::Cheque if EffectiveOrders.cheque_enabled
|
5
6
|
include Providers::Moneris if EffectiveOrders.moneris_enabled
|
6
7
|
include Providers::Paypal if EffectiveOrders.paypal_enabled
|
7
8
|
include Providers::Stripe if EffectiveOrders.stripe_enabled
|
8
9
|
include Providers::StripeConnect if EffectiveOrders.stripe_connect_enabled
|
10
|
+
include Providers::Ccbill if EffectiveOrders.ccbill_enabled
|
9
11
|
include Providers::AppCheckout if EffectiveOrders.app_checkout_enabled
|
10
12
|
|
13
|
+
include Providers::Pretend if EffectiveOrders.allow_pretend_purchase_in_development && !Rails.env.production?
|
14
|
+
include Providers::Pretend if EffectiveOrders.allow_pretend_purchase_in_production && Rails.env.production?
|
15
|
+
|
11
16
|
layout (EffectiveOrders.layout.kind_of?(Hash) ? EffectiveOrders.layout[:orders] : EffectiveOrders.layout)
|
12
17
|
|
13
|
-
|
14
|
-
|
18
|
+
if defined?(Devise)
|
19
|
+
before_filter :authenticate_user!, except: [:paypal_postback, :ccbill_postback]
|
20
|
+
end
|
21
|
+
|
22
|
+
before_filter :set_page_title, except: [:show]
|
15
23
|
|
16
24
|
# This is the entry point for the "Checkout" buttons
|
17
25
|
def new
|
18
|
-
@order ||= Order.new(current_cart, current_user)
|
26
|
+
@order ||= Effective::Order.new(current_cart, user: current_user)
|
19
27
|
|
20
28
|
EffectiveOrders.authorized?(self, :new, @order)
|
21
29
|
|
@@ -25,16 +33,45 @@ module Effective
|
|
25
33
|
|
26
34
|
if @order.errors[:order_items].present?
|
27
35
|
flash[:danger] = @order.errors[:order_items].first
|
28
|
-
redirect_to
|
36
|
+
redirect_to(effective_orders.cart_path)
|
37
|
+
return
|
29
38
|
elsif @order.errors[:total].present?
|
30
39
|
flash[:danger] = @order.errors[:total].first.gsub(EffectiveOrders.minimum_charge.to_i.to_s, view_context.price_to_currency(EffectiveOrders.minimum_charge.to_i))
|
31
|
-
redirect_to
|
40
|
+
redirect_to(effective_orders.cart_path)
|
41
|
+
return
|
32
42
|
end
|
43
|
+
|
44
|
+
@order.errors.clear
|
45
|
+
@order.billing_address.try(:errors).try(:clear)
|
46
|
+
@order.shipping_address.try(:errors).try(:clear)
|
47
|
+
|
48
|
+
render :checkout_step1
|
49
|
+
end
|
50
|
+
|
51
|
+
def edit
|
52
|
+
@order ||= Effective::Order.find(params[:id])
|
53
|
+
|
54
|
+
EffectiveOrders.authorized?(self, :edit, @order)
|
55
|
+
|
56
|
+
render :checkout_step1
|
33
57
|
end
|
34
58
|
|
35
59
|
def create
|
36
|
-
@order ||= Order.new(current_cart, current_user)
|
60
|
+
@order ||= Effective::Order.new(current_cart, user: current_user)
|
61
|
+
save_order_and_redirect_to_step2
|
62
|
+
end
|
63
|
+
|
64
|
+
# If there is an existing order, it will be posted to the /update action, instead of /create
|
65
|
+
def update
|
66
|
+
@order ||= Effective::Order.find(params[:id])
|
67
|
+
save_order_and_redirect_to_step2
|
68
|
+
end
|
69
|
+
|
70
|
+
def save_order_and_redirect_to_step2
|
71
|
+
(redirect_to effective_orders.cart_path and return) if (@order.blank? || current_user.blank?)
|
72
|
+
|
37
73
|
@order.attributes = order_params
|
74
|
+
@order.user_id = current_user.id
|
38
75
|
|
39
76
|
if EffectiveOrders.require_shipping_address
|
40
77
|
if @order.shipping_address_same_as_billing? && @order.billing_address.present?
|
@@ -42,74 +79,100 @@ module Effective
|
|
42
79
|
end
|
43
80
|
end
|
44
81
|
|
45
|
-
EffectiveOrders.authorized?(self, :create, @order)
|
82
|
+
EffectiveOrders.authorized?(self, (@order.persisted? ? :update : :create), @order)
|
46
83
|
|
47
84
|
Effective::Order.transaction do
|
48
85
|
begin
|
49
|
-
if @order.save_billing_address? && @order.user.respond_to?(:billing_address) && @order.billing_address.
|
86
|
+
if @order.save_billing_address? && @order.user.respond_to?(:billing_address=) && @order.billing_address.present?
|
50
87
|
@order.user.billing_address = @order.billing_address
|
51
88
|
end
|
52
89
|
|
53
|
-
if @order.save_shipping_address? && @order.user.respond_to?(:shipping_address) && @order.shipping_address.
|
90
|
+
if @order.save_shipping_address? && @order.user.respond_to?(:shipping_address=) && @order.shipping_address.present?
|
54
91
|
@order.user.shipping_address = @order.shipping_address
|
55
92
|
end
|
56
93
|
|
57
94
|
@order.save!
|
58
95
|
|
59
96
|
if @order.total == 0 && EffectiveOrders.allow_free_orders
|
60
|
-
order_purchased('automatic purchase of free order
|
97
|
+
order_purchased(details: 'automatic purchase of free order', provider: 'free', card: 'none')
|
61
98
|
else
|
62
|
-
redirect_to(effective_orders.order_path(@order))
|
99
|
+
redirect_to(effective_orders.order_path(@order)) # This goes to checkout_step2
|
63
100
|
end
|
64
101
|
|
65
|
-
return
|
102
|
+
return true
|
66
103
|
rescue => e
|
67
104
|
Rails.logger.info e.message
|
68
|
-
flash.now[:danger] = "
|
105
|
+
flash.now[:danger] = "Unable to save order: #{@order.errors.full_messages.to_sentence}. Please try again."
|
69
106
|
raise ActiveRecord::Rollback
|
70
107
|
end
|
71
108
|
end
|
72
109
|
|
73
|
-
|
110
|
+
# Fall back to checkout step 1
|
111
|
+
render :checkout_step1
|
74
112
|
end
|
75
113
|
|
76
114
|
def show
|
77
|
-
@order = Order.find(params[:id])
|
115
|
+
@order = Effective::Order.find(params[:id])
|
78
116
|
EffectiveOrders.authorized?(self, :show, @order)
|
79
117
|
|
80
|
-
|
81
|
-
@
|
82
|
-
|
83
|
-
|
118
|
+
@page_title ||= (
|
119
|
+
if @order.purchased?
|
120
|
+
'Receipt'
|
121
|
+
elsif @order.user != current_user
|
122
|
+
@order.pending? ? "Pending Order ##{@order.to_param}" : "Order ##{@order.to_param}"
|
123
|
+
else
|
124
|
+
'Checkout'
|
125
|
+
end
|
126
|
+
)
|
127
|
+
|
128
|
+
render(:checkout_step2) if @order.purchased? == false && @order.user == current_user
|
84
129
|
end
|
85
130
|
|
86
131
|
def index
|
87
|
-
|
132
|
+
@orders = Effective::Order.purchased_by(current_user)
|
133
|
+
|
134
|
+
EffectiveOrders.authorized?(self, :index, Effective::Order.new(user: current_user))
|
135
|
+
|
136
|
+
render action: :my_purchases
|
88
137
|
end
|
89
138
|
|
90
139
|
# Basically an index page.
|
91
140
|
# Purchases is an Order History page. List of purchased orders
|
92
141
|
def my_purchases
|
93
|
-
@orders = Order.purchased_by(current_user)
|
142
|
+
@orders = Effective::Order.purchased_by(current_user)
|
143
|
+
|
94
144
|
EffectiveOrders.authorized?(self, :index, Effective::Order.new(user: current_user))
|
95
145
|
end
|
96
146
|
|
97
147
|
# Sales is a list of what products beign sold by me have been purchased
|
98
148
|
def my_sales
|
99
|
-
@order_items = OrderItem.sold_by(current_user)
|
149
|
+
@order_items = Effective::OrderItem.sold_by(current_user)
|
100
150
|
EffectiveOrders.authorized?(self, :index, Effective::Order.new(user: current_user))
|
101
151
|
end
|
102
152
|
|
103
153
|
# Thank you for Purchasing this Order. This is where a successfully purchased order ends up
|
104
154
|
def purchased # Thank You!
|
105
|
-
@order =
|
155
|
+
@order = if params[:id].present?
|
156
|
+
Effective::Order.find(params[:id])
|
157
|
+
elsif current_user.present?
|
158
|
+
Effective::Order.purchased_by(current_user).first
|
159
|
+
end
|
160
|
+
|
161
|
+
if @order.blank?
|
162
|
+
redirect_to(effective_orders.my_purchases_path) and return
|
163
|
+
end
|
164
|
+
|
106
165
|
EffectiveOrders.authorized?(self, :show, @order)
|
166
|
+
|
167
|
+
redirect_to(effective_orders.order_path(@order)) unless @order.purchased?
|
107
168
|
end
|
108
169
|
|
109
170
|
# An error has occurred, please try again
|
110
171
|
def declined # An error occurred!
|
111
|
-
@order = Order.find(params[:id])
|
172
|
+
@order = Effective::Order.find(params[:id])
|
112
173
|
EffectiveOrders.authorized?(self, :show, @order)
|
174
|
+
|
175
|
+
redirect_to(effective_orders.order_path(@order)) unless @order.declined?
|
113
176
|
end
|
114
177
|
|
115
178
|
def resend_buyer_receipt
|
@@ -117,34 +180,21 @@ module Effective
|
|
117
180
|
EffectiveOrders.authorized?(self, :show, @order)
|
118
181
|
|
119
182
|
if @order.send_order_receipt_to_buyer!
|
120
|
-
flash[:success] = "Successfully
|
183
|
+
flash[:success] = "Successfully sent receipt to #{@order.user.email}"
|
121
184
|
else
|
122
|
-
flash[:danger] = "Unable to send
|
123
|
-
end
|
124
|
-
|
125
|
-
redirect_to(:back) rescue effective_orders.order_path(@order)
|
126
|
-
end
|
127
|
-
|
128
|
-
def pretend_purchase
|
129
|
-
@order = Order.find(params[:id])
|
130
|
-
EffectiveOrders.authorized?(self, :update, @order)
|
131
|
-
|
132
|
-
if (Rails.env.production? == false && EffectiveOrders.allow_pretend_purchase_in_development)
|
133
|
-
order_purchased('for pretend', params[:purchased_redirect_url], params[:declined_redirect_url])
|
134
|
-
end
|
135
|
-
|
136
|
-
if (Rails.env.production? == true && EffectiveOrders.allow_pretend_purchase_in_production)
|
137
|
-
order_purchased('for pretend', params[:purchased_redirect_url], params[:declined_redirect_url])
|
185
|
+
flash[:danger] = "Unable to send receipt."
|
138
186
|
end
|
139
187
|
|
188
|
+
redirect_to(request.referer.present? ? :back : effective_orders.order_path(@order))
|
140
189
|
end
|
141
190
|
|
142
191
|
protected
|
143
192
|
|
144
|
-
def order_purchased(details
|
193
|
+
def order_purchased(details: 'none', provider:, card: 'none', redirect_url: nil, declined_redirect_url: nil)
|
145
194
|
begin
|
146
|
-
@order.purchase!(details)
|
147
|
-
|
195
|
+
@order.purchase!(details: details, provider: provider, card: card)
|
196
|
+
|
197
|
+
Effective::Cart.where(user_id: @order.user_id).try(:destroy_all) # current_cart won't work for provider post backs here
|
148
198
|
|
149
199
|
if EffectiveOrders.mailer[:send_order_receipt_to_buyer]
|
150
200
|
flash[:success] = "Payment successful! Please check your email for a receipt."
|
@@ -155,19 +205,16 @@ module Effective
|
|
155
205
|
redirect_to (redirect_url.presence || effective_orders.order_purchased_path(':id')).gsub(':id', @order.to_param.to_s)
|
156
206
|
rescue => e
|
157
207
|
flash[:danger] = "An error occurred while processing your payment: #{e.message}. Please try again."
|
158
|
-
redirect_to
|
208
|
+
redirect_to(declined_redirect_url.presence || effective_orders.cart_path).gsub(':id', @order.to_param.to_s)
|
159
209
|
end
|
160
210
|
end
|
161
211
|
|
162
|
-
|
163
|
-
|
164
|
-
def order_declined(details = nil, redirect_url = nil, options = {})
|
165
|
-
flash_msg = options.fetch(:flash, "Payment was unsuccessful. Your credit card was declined by the payment processor. Please try again.")
|
212
|
+
def order_declined(details: 'none', provider:, card: 'none', redirect_url: nil, message: nil)
|
213
|
+
@order.decline!(details: details, provider: provider, card: card) rescue nil
|
166
214
|
|
167
|
-
|
168
|
-
flash[:danger] = flash_msg
|
215
|
+
flash[:danger] = message.presence || 'Payment was unsuccessful. Your credit card was declined by the payment processor. Please try again.'
|
169
216
|
|
170
|
-
redirect_to
|
217
|
+
redirect_to(redirect_url.presence || effective_orders.order_declined_path(@order)).gsub(':id', @order.id.to_s)
|
171
218
|
end
|
172
219
|
|
173
220
|
private
|
@@ -175,13 +222,7 @@ module Effective
|
|
175
222
|
# StrongParameters
|
176
223
|
def order_params
|
177
224
|
begin
|
178
|
-
params.require(:effective_order).permit(
|
179
|
-
:save_billing_address, :save_shipping_address, :shipping_address_same_as_billing,
|
180
|
-
:billing_address => [:full_name, :address1, :address2, :city, :country_code, :state_code, :postal_code],
|
181
|
-
:shipping_address => [:full_name, :address1, :address2, :city, :country_code, :state_code, :postal_code],
|
182
|
-
:user_attributes => (EffectiveOrders.collect_user_fields || []),
|
183
|
-
:order_items_attributes => [:stripe_coupon_id, :class, :id]
|
184
|
-
)
|
225
|
+
params.require(:effective_order).permit(EffectiveOrders.permitted_params)
|
185
226
|
rescue => e
|
186
227
|
params[:effective_order] || {}
|
187
228
|
end
|
@@ -189,11 +230,11 @@ module Effective
|
|
189
230
|
|
190
231
|
def set_page_title
|
191
232
|
@page_title ||= case params[:action]
|
233
|
+
when 'index' ; 'Order History'
|
192
234
|
when 'my_purchases' ; 'Order History'
|
193
235
|
when 'my_sales' ; 'Sales History'
|
194
236
|
when 'purchased' ; 'Thank You'
|
195
237
|
when 'declined' ; 'Payment Declined'
|
196
|
-
when 'show' ; 'Order Receipt'
|
197
238
|
else 'Checkout'
|
198
239
|
end
|
199
240
|
end
|