effective_orders 1.8.1 → 2.0.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|