effective_orders 3.2.3 → 4.0.0beta1
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 +5 -5
- data/MIT-LICENSE +1 -1
- data/README.md +11 -99
- data/app/assets/stylesheets/effective_orders.scss +1 -0
- data/app/assets/stylesheets/effective_orders/_cart.scss +4 -0
- data/app/assets/stylesheets/effective_orders/_order.scss +6 -2
- data/app/controllers/admin/orders_controller.rb +17 -17
- data/app/controllers/effective/carts_controller.rb +4 -2
- data/app/controllers/effective/orders_controller.rb +50 -105
- data/app/controllers/effective/providers/cheque.rb +1 -1
- data/app/controllers/effective/providers/moneris.rb +17 -23
- data/app/controllers/effective/providers/stripe.rb +2 -37
- data/app/datatables/effective_customers_datatable.rb +1 -5
- data/app/datatables/effective_order_items_datatable.rb +10 -10
- data/app/datatables/effective_orders_datatable.rb +23 -46
- data/app/helpers/effective_carts_helper.rb +5 -25
- data/app/helpers/effective_orders_helper.rb +29 -61
- data/app/helpers/effective_paypal_helper.rb +10 -8
- data/app/helpers/effective_stripe_helper.rb +2 -33
- data/app/models/concerns/acts_as_purchasable.rb +26 -37
- data/app/models/concerns/acts_as_subscribable.rb +1 -1
- data/app/models/effective/cart.rb +4 -5
- data/app/models/effective/customer.rb +1 -4
- data/app/models/effective/order.rb +132 -163
- data/app/models/effective/order_item.rb +2 -21
- data/app/models/{effective → validators/effective}/sold_out_validator.rb +0 -0
- data/app/views/admin/customers/index.html.haml +1 -4
- data/app/views/admin/order_items/index.html.haml +1 -4
- data/app/views/admin/orders/_actions.html.haml +18 -9
- data/app/views/admin/orders/_form.html.haml +12 -14
- data/app/views/admin/orders/_form_note_internal.html.haml +2 -2
- data/app/views/admin/orders/_order_actions.html.haml +8 -5
- data/app/views/admin/orders/_order_item_fields.html.haml +9 -8
- data/app/views/admin/orders/checkout.html.haml +3 -0
- data/app/views/admin/orders/edit.html.haml +3 -1
- data/app/views/admin/orders/new.html.haml +2 -1
- data/app/views/admin/orders/show.html.haml +2 -5
- data/app/views/effective/carts/_cart.html.haml +1 -1
- data/app/views/effective/carts/_cart_actions.html.haml +3 -4
- data/app/views/effective/carts/show.html.haml +4 -4
- data/app/views/effective/orders/_checkout_actions.html.haml +3 -0
- data/app/views/effective/orders/_checkout_step1.html.haml +20 -27
- data/app/views/effective/orders/_checkout_step2.html.haml +26 -30
- data/app/views/effective/orders/_order.html.haml +1 -2
- data/app/views/effective/orders/_order_actions.html.haml +14 -6
- data/app/views/effective/orders/_order_header.html.haml +2 -2
- data/app/views/effective/orders/_order_note_fields.html.haml +6 -4
- data/app/views/effective/orders/_order_notes.html.haml +15 -0
- data/app/views/effective/orders/_order_payment_details.html.haml +1 -1
- data/app/views/effective/orders/_order_shipping.html.haml +6 -6
- data/app/views/effective/orders/_order_terms_and_conditions_fields.html.haml +5 -6
- data/app/views/effective/orders/_order_user_fields.html.haml +5 -11
- data/app/views/effective/orders/_orders_table.html.haml +2 -6
- data/app/views/effective/orders/index.html.haml +2 -1
- data/app/views/effective/orders/mark_as_paid/_form.html.haml +8 -14
- data/app/views/effective/orders/moneris/_form.html.haml +43 -4
- data/app/views/effective/orders/pretend/_form.html.haml +1 -3
- data/app/views/effective/orders/refund/_form.html.haml +8 -12
- data/app/views/effective/orders/show.html.haml +2 -2
- data/app/views/effective/orders/stripe/_form.html.haml +4 -4
- data/app/views/effective/orders_mailer/payment_request_to_buyer.html.haml +1 -1
- data/app/views/effective/orders_mailer/pending_order_invoice_to_buyer.html.haml +1 -1
- data/config/effective_orders.rb +116 -182
- data/config/routes.rb +16 -27
- data/db/migrate/01_create_effective_orders.rb.erb +6 -5
- data/lib/effective_orders.rb +72 -76
- data/lib/effective_orders/engine.rb +8 -80
- data/lib/effective_orders/version.rb +1 -1
- data/lib/generators/templates/effective_orders_mailer_preview.rb +4 -4
- metadata +26 -38
- data/Rakefile +0 -21
- data/app/assets/config/effective_orders_manifest.js +0 -3
- data/app/assets/images/effective_orders/stripe_connect.png +0 -0
- data/app/controllers/effective/providers/app_checkout.rb +0 -38
- data/app/controllers/effective/providers/ccbill.rb +0 -34
- data/app/controllers/effective/providers/stripe_connect.rb +0 -47
- data/app/helpers/effective_ccbill_helper.rb +0 -25
- data/app/models/effective/providers/ccbill_postback.rb +0 -85
- data/app/models/effective/providers/moneris_charge.rb +0 -115
- data/app/views/effective/orders/_order_note.html.haml +0 -5
- data/app/views/effective/orders/_order_note_to_buyer.html.haml +0 -9
- data/app/views/effective/orders/app_checkout/_form.html.haml +0 -2
- data/app/views/effective/orders/ccbill/_form.html.haml +0 -24
- data/app/views/effective/orders/my_purchases.html.haml +0 -3
- data/app/views/effective/orders/my_sales.html.haml +0 -25
- data/app/views/effective/orders_mailer/order_receipt_to_seller.html.haml +0 -25
- data/lib/effective_orders/app_checkout_service.rb +0 -26
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: e0cf749b4cef2660e59b16b802211c75e79e7400
|
4
|
+
data.tar.gz: c4c452a35a548596146b2fdf099916065361dd55
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: af34590308483e7db60eb579b952167622809d2c0cfb9c1101221800e0a3ce51e5ffe6d8d7895755f7fe18282ac379e6de0406f47802c445e16a2492fd838a7a
|
7
|
+
data.tar.gz: c872866386ab0490fd154cb8caf59119c75ea61cb2f601049d92a75ec0d9a97a7f4e939563a13807b53f3440fe8a0d636c40326da2aa6b89f2858a4fa321f73e
|
data/MIT-LICENSE
CHANGED
data/README.md
CHANGED
@@ -4,20 +4,19 @@ Carts, Orders, and collecting payment via Stripe, PayPal and Moneris.
|
|
4
4
|
|
5
5
|
A Rails Engine to handle the purchase workflow in a Rails 3.2.x / Rails 4 application.
|
6
6
|
|
7
|
-
Also works with Stripe
|
7
|
+
Also works with Stripe Subscriptions.
|
8
8
|
|
9
9
|
Sends order receipt emails automatically.
|
10
10
|
|
11
11
|
Has Order History, My Purchases, My Sales and Admin screens.
|
12
12
|
|
13
|
-
##
|
13
|
+
## effective_orders 4.0
|
14
14
|
|
15
|
-
This is the
|
15
|
+
This is the 4.0 series of effective_orders.
|
16
16
|
|
17
|
-
|
18
|
-
|
19
|
-
For Bootstrap 4 please see the master branch and/or effective_orders 4.x gems.
|
17
|
+
This requires Twitter Bootstrap 4 and Rails 5.1+
|
20
18
|
|
19
|
+
Please check out [Effective Orders 3.x](https://github.com/code-and-effect/effective_orders/tree/bootstrap3) for more information using this gem with Bootstrap 3.
|
21
20
|
|
22
21
|
## Getting Started
|
23
22
|
|
@@ -26,7 +25,7 @@ Please first install the [effective_addresses](https://github.com/code-and-effec
|
|
26
25
|
Add to your Gemfile:
|
27
26
|
|
28
27
|
```ruby
|
29
|
-
gem 'effective_orders'
|
28
|
+
gem 'effective_orders'
|
30
29
|
```
|
31
30
|
|
32
31
|
Run the bundle command to install it:
|
@@ -264,10 +263,6 @@ acts_as_purchsable provides the following scopes:
|
|
264
263
|
|
265
264
|
`Product.purchased_by(user)` all the Products purchased by a given user.
|
266
265
|
|
267
|
-
`Product.sold` all the Products that have been solid (same as purchased)
|
268
|
-
|
269
|
-
`Product.sold_by(user)` all the Products that this user has sold via Stripe Connect
|
270
|
-
|
271
266
|
`Product.not_purchased` all unpurchased Products
|
272
267
|
|
273
268
|
### Digital Downloads
|
@@ -464,7 +459,7 @@ And call `render_cart(current_cart)` to display the Cart anywhere.
|
|
464
459
|
|
465
460
|
On the Checkout page (`effective_orders.new_order_path`) a new `Effective::Order` object is created and one or more `Effective::OrderItem`s are initialized based on the `current_cart`.
|
466
461
|
|
467
|
-
If the configuration options `config.
|
462
|
+
If the configuration options `config.billing_address` and/or `config.shipping_address` options are `true` then the user will be prompted for the appropriate addresses, based on [effective_addresses](https://github.com/code-and-effect/effective_addresses/).
|
468
463
|
|
469
464
|
If `config.use_address_full_name` is set to `true` then appropriate form field will be shown and the user will be prompted for the appropriate address full name during the checkout process, based on [effective_addresses](https://github.com/code-and-effect/effective_addresses/).
|
470
465
|
|
@@ -512,7 +507,7 @@ The `acts_as_purchasable` `.purchased?` and `.purchased_by?(user)` methods only
|
|
512
507
|
To programatically purchase one or more `acts_as_purchasable` objects:
|
513
508
|
|
514
509
|
```ruby
|
515
|
-
Effective::Order.new(
|
510
|
+
Effective::Order.new(@product1, @product2, user: current_user).purchase!(details: 'from my rake task')
|
516
511
|
```
|
517
512
|
|
518
513
|
Here the `billing_address` and `shipping_address` are copied from the `current_user` object if the `current_user` responds_to `billing_address` / `shipping_address` as per [effective_addresses](https://github.com/code-and-effect/effective_addresses/).
|
@@ -541,7 +536,7 @@ The one gotcha with the above two scenarios, is that when `purchase!` is called,
|
|
541
536
|
You can skip validations with the following command, but be careful as this skips all validations:
|
542
537
|
|
543
538
|
```ruby
|
544
|
-
Effective::Order.new(
|
539
|
+
Effective::Order.new(@product, user: @user).purchase!(validate: false)
|
545
540
|
```
|
546
541
|
|
547
542
|
The `@product` is now considered purchased.
|
@@ -554,32 +549,10 @@ There also exist the scopes: `Effective::Order.purchased` and `Effective::Order.
|
|
554
549
|
|
555
550
|
### My Purchases / Order History
|
556
551
|
|
557
|
-
This screen displays all past purchases made by the current user. You can add it to your site's main menu or User profile area:
|
558
|
-
|
559
|
-
```ruby
|
560
|
-
= link_to_my_purchases() # To display My Purchases
|
561
|
-
```
|
562
|
-
|
563
|
-
or
|
564
|
-
|
565
|
-
```ruby
|
566
|
-
= link_to_my_purchases(label: 'Order History', class: 'btn btn-primary')
|
567
|
-
```
|
568
|
-
|
569
|
-
or
|
570
|
-
|
571
552
|
```ruby
|
572
|
-
= link_to '
|
553
|
+
= link_to 'Order History', effective_orders.orders_path
|
573
554
|
```
|
574
555
|
|
575
|
-
or render it inline on an existing page with
|
576
|
-
|
577
|
-
```ruby
|
578
|
-
render_order_history(user_or_orders)
|
579
|
-
```
|
580
|
-
|
581
|
-
If a user is passed, a call to `Effective::Order.purchased_by(user)` will be made to assign all purchased orders.
|
582
|
-
|
583
556
|
Totally optional, but another way of displaying the Order History is to use the included datatable, based on [effective_datatables](https://github.com/code-and-effect/effective_datatables/)
|
584
557
|
|
585
558
|
In your controller:
|
@@ -829,58 +802,6 @@ You an find these keys from the Stripe Dashbaord -> Your Account (dropdown) -> A
|
|
829
802
|
|
830
803
|
You're ready to accept payments.
|
831
804
|
|
832
|
-
### Stripe Connect
|
833
|
-
|
834
|
-
Stripe Connect allows effective_orders to collect payments on behalf of users.
|
835
|
-
|
836
|
-
First register your application with Stripe
|
837
|
-
|
838
|
-
Stripe Dashboard -> Your Account (dropdown) -> Account Settings -> Apps
|
839
|
-
|
840
|
-
Register your application
|
841
|
-
|
842
|
-
Name: Your Application Name
|
843
|
-
Website URL: root_url
|
844
|
-
|
845
|
-
Development:
|
846
|
-
|
847
|
-
client_id: given by stripe, we need to record this.
|
848
|
-
redirect_uri: stripe_connect_redirect_uri_url # http://www.example.com/effective/orders/stripe_connect_redirect_uri
|
849
|
-
webhook_uri: none
|
850
|
-
|
851
|
-
And add these values to the app/config/effective_orders.rb initializer:
|
852
|
-
|
853
|
-
```ruby
|
854
|
-
config.stripe = {
|
855
|
-
secret_key: 'sk_live_IKd6HDaYUfoRjflWQTXfFNfc',
|
856
|
-
publishable_key: 'pk_live_liEGn9f0mcxKmoSjoeNbbuE1',
|
857
|
-
currency: 'usd',
|
858
|
-
connect_client_id: 'ca_35jLok5G9kosyYF7quTOwcauJjTnUnud'
|
859
|
-
}
|
860
|
-
```
|
861
|
-
|
862
|
-
There are a few additional steps you need to take on the rails application side of things:
|
863
|
-
|
864
|
-
|
865
|
-
Before allowing one of your Users to create a Product for sale, you must enforce that they have a Stripe Connect account setup and configured.
|
866
|
-
|
867
|
-
You can check if they have an account set up using the built in helper `is_stripe_connect_seller?(current_user)`
|
868
|
-
|
869
|
-
If the above check returns false, you must send them to Stripe to set up their StripeConnect account, using the built in helper `link_to_new_stripe_connect_customer`
|
870
|
-
|
871
|
-
Once they've registered their account on the Stripe side, Stripe sends a webhook request, which is processed by the `webhooks_controller.rb`
|
872
|
-
|
873
|
-
In the webhook controller, an `Effective::Customer` object is created, and your user is now ready to sell stuff via StripeConnect.
|
874
|
-
|
875
|
-
|
876
|
-
Your product model must also define a `seller` method so that effective_orders knows who is selling the Product. Add the following to your `acts_as_purchasable` model:
|
877
|
-
|
878
|
-
```ruby
|
879
|
-
def seller
|
880
|
-
User.find(user_id)
|
881
|
-
end
|
882
|
-
```
|
883
|
-
|
884
805
|
### Stripe Subscriptions
|
885
806
|
|
886
807
|
To set up stripe subscriptions:
|
@@ -935,7 +856,7 @@ To set up stripe:
|
|
935
856
|
|
936
857
|
4.) Click API -> Webhooks and add an endpoint `root_url/webhooks/stripe`. You will need something like ngrok to test this.
|
937
858
|
|
938
|
-
5.) Record the webhook Signing secret in `config.
|
859
|
+
5.) Record the webhook Signing secret in `config.subscriptions[:webhook_secret]`
|
939
860
|
|
940
861
|
|
941
862
|
## Paying Via PayPal
|
@@ -1154,15 +1075,6 @@ end
|
|
1154
1075
|
|
1155
1076
|
MIT License. Copyright [Code and Effect Inc.](http://www.codeandeffect.com/)
|
1156
1077
|
|
1157
|
-
## Testing
|
1158
|
-
|
1159
|
-
Run tests by:
|
1160
|
-
|
1161
|
-
```ruby
|
1162
|
-
rspec
|
1163
|
-
```
|
1164
|
-
|
1165
|
-
|
1166
1078
|
## Contributing
|
1167
1079
|
|
1168
1080
|
1. Fork it
|
@@ -28,7 +28,11 @@
|
|
28
28
|
// Print - Resend Receipt. Ontop of order.
|
29
29
|
.effective-order-actions {
|
30
30
|
text-align: right;
|
31
|
-
margin-bottom:
|
31
|
+
margin-bottom: 0.5rem;
|
32
|
+
}
|
33
|
+
|
34
|
+
.effective-order-change-items {
|
35
|
+
margin-bottom: 1rem;
|
32
36
|
}
|
33
37
|
|
34
38
|
// Checkout buttons. Bottom of order.
|
@@ -41,7 +45,7 @@
|
|
41
45
|
}
|
42
46
|
|
43
47
|
.effective-order-admin-purchase-actions {
|
44
|
-
margin-top:
|
48
|
+
margin-top: 0.5rem;
|
45
49
|
}
|
46
50
|
|
47
51
|
form.new_effective_order {
|
@@ -4,6 +4,10 @@ module Admin
|
|
4
4
|
|
5
5
|
layout (EffectiveOrders.layout.kind_of?(Hash) ? EffectiveOrders.layout[:admin_orders] : EffectiveOrders.layout)
|
6
6
|
|
7
|
+
# def effective_resource
|
8
|
+
# @_effective_resource ||= Effective::Resource.new('effective/order', namespace: :admin)
|
9
|
+
# end
|
10
|
+
|
7
11
|
def new
|
8
12
|
@order = Effective::Order.new
|
9
13
|
|
@@ -40,8 +44,7 @@ module Admin
|
|
40
44
|
end
|
41
45
|
|
42
46
|
@order.attributes = order_params.except(:order_items_attributes, :user_id)
|
43
|
-
|
44
|
-
@order.create_as_pending!
|
47
|
+
@order.pending!
|
45
48
|
|
46
49
|
message = 'Successfully created order'
|
47
50
|
message << ". A request for payment has been sent to #{@order.user.email}" if @order.send_payment_request_to_buyer?
|
@@ -55,7 +58,7 @@ module Admin
|
|
55
58
|
end
|
56
59
|
|
57
60
|
@page_title = 'New Order'
|
58
|
-
flash.now[:danger] =
|
61
|
+
flash.now[:danger] = flash_danger(@order)
|
59
62
|
render :new
|
60
63
|
end
|
61
64
|
|
@@ -68,7 +71,6 @@ module Admin
|
|
68
71
|
|
69
72
|
def update
|
70
73
|
@order = Effective::Order.find(params[:id])
|
71
|
-
@order.skip_minimum_charge_validation = true if @order.refund?
|
72
74
|
|
73
75
|
@page_title ||= @order.to_s
|
74
76
|
|
@@ -90,7 +92,6 @@ module Admin
|
|
90
92
|
|
91
93
|
def show
|
92
94
|
@order = Effective::Order.find(params[:id])
|
93
|
-
@order.skip_minimum_charge_validation = true if @order.refund?
|
94
95
|
|
95
96
|
@page_title ||= @order.to_s
|
96
97
|
|
@@ -101,24 +102,26 @@ module Admin
|
|
101
102
|
# See Effective::OrdersController checkout
|
102
103
|
def checkout
|
103
104
|
@order = Effective::Order.find(params[:id])
|
104
|
-
@order.skip_minimum_charge_validation = true if @order.refund?
|
105
|
-
|
106
|
-
@page_title ||= 'Checkout'
|
107
105
|
|
108
106
|
authorize_effective_order!
|
109
107
|
|
108
|
+
if request.get?
|
109
|
+
@order.assign_confirmed_if_valid!
|
110
|
+
render :checkout and return
|
111
|
+
end
|
112
|
+
|
110
113
|
Effective::Order.transaction do
|
111
114
|
begin
|
112
115
|
@order.assign_attributes(checkout_params)
|
113
|
-
@order.
|
114
|
-
redirect_to(effective_orders.
|
116
|
+
@order.confirm!
|
117
|
+
redirect_to(effective_orders.checkout_admin_order_path(@order)) and return
|
115
118
|
rescue => e
|
116
119
|
raise ActiveRecord::Rollback
|
117
120
|
end
|
118
121
|
end
|
119
122
|
|
120
|
-
flash.now[:danger] = "Unable to
|
121
|
-
render :
|
123
|
+
flash.now[:danger] = "Unable to proceed: #{flash_errors(@order)}. Please try again."
|
124
|
+
render :checkout
|
122
125
|
end
|
123
126
|
|
124
127
|
def index
|
@@ -130,7 +133,7 @@ module Admin
|
|
130
133
|
end
|
131
134
|
|
132
135
|
def destroy
|
133
|
-
@order = Effective::Order.find(params[:id])
|
136
|
+
@order = Effective::Order.all.not_purchased.find(params[:id])
|
134
137
|
|
135
138
|
authorize_effective_order!
|
136
139
|
|
@@ -209,13 +212,10 @@ module Admin
|
|
209
212
|
case params[:commit].to_s
|
210
213
|
when 'Save' ; effective_orders.admin_order_path(@order)
|
211
214
|
|
212
|
-
when 'Save and Continue' ; effective_orders.admin_orders_path
|
213
|
-
when 'Save and Add New' ; effective_orders.new_admin_order_path(user_id: @order.user.try(:to_param))
|
214
|
-
when 'Save and Duplicate' ; effective_orders.new_admin_order_path(duplicate_id: @order.to_param)
|
215
|
-
|
216
215
|
when 'Continue' ; effective_orders.admin_orders_path
|
217
216
|
when 'Add New' ; effective_orders.new_admin_order_path(user_id: @order.user.try(:to_param))
|
218
217
|
when 'Duplicate' ; effective_orders.new_admin_order_path(duplicate_id: @order.to_param)
|
218
|
+
when 'Checkout' ; effective_orders.checkout_admin_order_path(@order.to_param)
|
219
219
|
|
220
220
|
else effective_orders.admin_order_path(@order)
|
221
221
|
end
|
@@ -1,7 +1,5 @@
|
|
1
1
|
module Effective
|
2
2
|
class CartsController < ApplicationController
|
3
|
-
include EffectiveCartsHelper
|
4
|
-
|
5
3
|
layout (EffectiveOrders.layout.kind_of?(Hash) ? EffectiveOrders.layout[:carts] : EffectiveOrders.layout)
|
6
4
|
|
7
5
|
def show
|
@@ -61,6 +59,10 @@ module Effective
|
|
61
59
|
|
62
60
|
private
|
63
61
|
|
62
|
+
def current_cart
|
63
|
+
view_context.current_cart
|
64
|
+
end
|
65
|
+
|
64
66
|
def add_to_cart_params
|
65
67
|
params.permit(:purchasable_type, :purchasable_id, :quantity)
|
66
68
|
end
|
@@ -1,137 +1,105 @@
|
|
1
1
|
module Effective
|
2
2
|
class OrdersController < ApplicationController
|
3
|
-
include EffectiveCartsHelper
|
4
|
-
|
5
3
|
include Concerns::Purchase
|
6
4
|
|
7
|
-
include Providers::
|
8
|
-
include Providers::
|
9
|
-
include Providers::
|
10
|
-
include Providers::
|
11
|
-
include Providers::
|
12
|
-
include Providers::
|
13
|
-
include Providers::
|
14
|
-
include Providers::
|
15
|
-
include Providers::Pretend if EffectiveOrders.allow_pretend_purchase_in_production && Rails.env.production?
|
16
|
-
include Providers::Refund if EffectiveOrders.allow_refunds
|
17
|
-
include Providers::Stripe if EffectiveOrders.stripe_enabled
|
18
|
-
include Providers::StripeConnect if EffectiveOrders.stripe_connect_enabled
|
5
|
+
include Providers::Cheque if EffectiveOrders.cheque?
|
6
|
+
include Providers::Free if EffectiveOrders.free?
|
7
|
+
include Providers::MarkAsPaid if EffectiveOrders.mark_as_paid?
|
8
|
+
include Providers::Moneris if EffectiveOrders.moneris?
|
9
|
+
include Providers::Paypal if EffectiveOrders.paypal?
|
10
|
+
include Providers::Pretend if EffectiveOrders.pretend?
|
11
|
+
include Providers::Refund if EffectiveOrders.refunds?
|
12
|
+
include Providers::Stripe if EffectiveOrders.stripe?
|
19
13
|
|
20
14
|
layout (EffectiveOrders.layout.kind_of?(Hash) ? EffectiveOrders.layout[:orders] : EffectiveOrders.layout)
|
21
15
|
|
22
|
-
before_action :authenticate_user!, except: [:ccbill_postback, :free, :
|
16
|
+
before_action :authenticate_user!, except: [:ccbill_postback, :free, :paypal_postback, :pretend]
|
23
17
|
before_action :set_page_title, except: [:show]
|
24
18
|
|
25
|
-
#
|
19
|
+
# If you want to use the Add to Cart -> Checkout flow
|
20
|
+
# Add one or more items however you do.
|
21
|
+
# redirect_to effective_orders.new_order_path, which is here.
|
22
|
+
# This is the entry point for any Checkout button.
|
23
|
+
# It displayes an order based on the cart
|
24
|
+
# Always step1
|
26
25
|
def new
|
27
|
-
@order ||= Effective::Order.new(
|
26
|
+
@order ||= Effective::Order.new(view_context.current_cart)
|
28
27
|
|
29
28
|
EffectiveOrders.authorize!(self, :new, @order)
|
30
29
|
|
31
|
-
|
32
|
-
|
33
|
-
@order.valid?
|
34
|
-
|
35
|
-
if @order.errors[:order_items].present?
|
36
|
-
flash[:danger] = @order.errors[:order_items].first
|
37
|
-
redirect_to(effective_orders.cart_path)
|
38
|
-
return
|
39
|
-
elsif @order.errors[:total].present?
|
40
|
-
flash[:danger] = @order.errors[:total].first
|
30
|
+
unless @order.valid?
|
31
|
+
flash[:danger] = "Unable to proceed: #{flash_errors(@order)}. Please try again."
|
41
32
|
redirect_to(effective_orders.cart_path)
|
42
33
|
return
|
43
34
|
end
|
44
|
-
|
45
|
-
@order.errors.clear
|
46
|
-
@order.billing_address.errors.clear if @order.billing_address
|
47
|
-
@order.shipping_address.errors.clear if @order.shipping_address
|
48
35
|
end
|
49
36
|
|
37
|
+
# Confirms an order from the cart.
|
50
38
|
def create
|
51
|
-
@order ||= Effective::Order.new(
|
39
|
+
@order ||= Effective::Order.new(view_context.current_cart)
|
52
40
|
EffectiveOrders.authorize!(self, :create, @order)
|
53
41
|
|
54
|
-
@order.assign_attributes(checkout_params)
|
42
|
+
@order.assign_attributes(checkout_params)
|
55
43
|
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
rescue => e
|
62
|
-
raise ActiveRecord::Rollback
|
63
|
-
end
|
44
|
+
if (@order.confirm! rescue false)
|
45
|
+
redirect_to(effective_orders.order_path(@order))
|
46
|
+
else
|
47
|
+
flash.now[:danger] = "Unable to proceed: #{flash_errors(@order)}. Please try again."
|
48
|
+
render :new
|
64
49
|
end
|
50
|
+
end
|
65
51
|
|
66
|
-
|
67
|
-
|
52
|
+
# If you want to use the order = Effective::Order.new(@thing); order.save! flow
|
53
|
+
# Add one or more items to the order.
|
54
|
+
# redirect_to effective_orders.order_path(order), which is here
|
55
|
+
# This is the entry point for an existing order.
|
56
|
+
# Might render step1 or step2
|
57
|
+
def show
|
58
|
+
@order = Effective::Order.find(params[:id])
|
59
|
+
EffectiveOrders.authorize!(self, :show, @order)
|
60
|
+
|
61
|
+
@page_title ||= ((@order.user == current_user && !@order.purchased?) ? 'Checkout' : @order.to_s)
|
68
62
|
end
|
69
63
|
|
64
|
+
# Always step1
|
70
65
|
def edit
|
71
66
|
@order ||= Effective::Order.find(params[:id])
|
72
67
|
EffectiveOrders.authorize!(self, :edit, @order)
|
73
68
|
end
|
74
69
|
|
70
|
+
# Confirms the order from existing order
|
75
71
|
def update
|
76
72
|
@order ||= Effective::Order.find(params[:id])
|
77
73
|
EffectiveOrders.authorize!(self, :update, @order)
|
78
74
|
|
79
75
|
@order.assign_attributes(checkout_params)
|
80
76
|
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
redirect_to(effective_orders.order_path(@order)) and return
|
87
|
-
rescue => e
|
88
|
-
raise ActiveRecord::Rollback
|
89
|
-
end
|
77
|
+
if (@order.confirm! rescue false)
|
78
|
+
redirect_to(effective_orders.order_path(@order))
|
79
|
+
else
|
80
|
+
flash.now[:danger] = "Unable to proceed: #{flash_errors(@order)}. Please try again."
|
81
|
+
render :edit
|
90
82
|
end
|
91
|
-
|
92
|
-
flash.now[:danger] = "Unable to proceed: #{@order.errors.full_messages.to_sentence}. Please try again."
|
93
|
-
render :edit
|
94
|
-
end
|
95
|
-
|
96
|
-
def show
|
97
|
-
@order = Effective::Order.find(params[:id])
|
98
|
-
EffectiveOrders.authorize!(self, :show, @order)
|
99
|
-
|
100
|
-
@page_title ||= ((@order.user == current_user && !@order.purchased?) ? 'Checkout' : @order.to_s)
|
101
83
|
end
|
102
84
|
|
85
|
+
# My Orders History
|
103
86
|
def index
|
104
|
-
@orders = Effective::Order.deep.
|
87
|
+
@orders = Effective::Order.deep.purchased.where(user: current_user)
|
105
88
|
@pending_orders = Effective::Order.deep.pending.where(user: current_user)
|
106
89
|
|
107
90
|
EffectiveOrders.authorize!(self, :index, Effective::Order.new(user: current_user))
|
108
91
|
end
|
109
92
|
|
110
|
-
# Basically an index page.
|
111
|
-
# Purchases is an Order History page. List of purchased orders
|
112
|
-
def my_purchases
|
113
|
-
@orders = Effective::Order.deep.purchased_by(current_user)
|
114
|
-
EffectiveOrders.authorize!(self, :index, Effective::Order.new(user: current_user))
|
115
|
-
end
|
116
|
-
|
117
|
-
# Sales is a list of what products beign sold by me have been purchased
|
118
|
-
def my_sales
|
119
|
-
@order_items = Effective::OrderItem.deep.sold_by(current_user)
|
120
|
-
EffectiveOrders.authorize!(self, :index, Effective::Order.new(user: current_user))
|
121
|
-
end
|
122
|
-
|
123
93
|
# Thank you for Purchasing this Order. This is where a successfully purchased order ends up
|
124
94
|
def purchased # Thank You!
|
125
95
|
@order = if params[:id].present?
|
126
96
|
Effective::Order.find(params[:id])
|
127
97
|
elsif current_user.present?
|
128
|
-
Effective::Order.purchased_by(current_user).
|
98
|
+
Effective::Order.sorted.purchased_by(current_user).last
|
129
99
|
end
|
130
100
|
|
131
|
-
clear_redirect_cookie!
|
132
|
-
|
133
101
|
if @order.blank?
|
134
|
-
redirect_to(effective_orders.
|
102
|
+
redirect_to(effective_orders.orders_path) and return
|
135
103
|
end
|
136
104
|
|
137
105
|
EffectiveOrders.authorize!(self, :show, @order)
|
@@ -143,8 +111,6 @@ module Effective
|
|
143
111
|
@order = Effective::Order.find(params[:id])
|
144
112
|
EffectiveOrders.authorize!(self, :show, @order)
|
145
113
|
|
146
|
-
clear_redirect_cookie!
|
147
|
-
|
148
114
|
redirect_to(effective_orders.order_path(@order)) unless @order.declined?
|
149
115
|
end
|
150
116
|
|
@@ -174,7 +140,7 @@ module Effective
|
|
174
140
|
EffectiveOrders.authorize!(self, :index, Effective::Order.new(user: current_user))
|
175
141
|
|
176
142
|
@orders.each do |order|
|
177
|
-
next unless
|
143
|
+
next unless EffectiveOrders.authorized?(self, :show, order)
|
178
144
|
|
179
145
|
order.send_order_receipt_to_buyer!
|
180
146
|
end
|
@@ -187,25 +153,6 @@ module Effective
|
|
187
153
|
|
188
154
|
private
|
189
155
|
|
190
|
-
def set_redirect_cookie!
|
191
|
-
return unless @order.present?
|
192
|
-
|
193
|
-
if params[:purchased_url]
|
194
|
-
session["effective_orders_#{@order.id}_purchased_url"] = params[:purchased_url]
|
195
|
-
end
|
196
|
-
|
197
|
-
if params[:declined_url]
|
198
|
-
session["effective_orders_#{@order.id}_declined_url"] = params[:declined_url]
|
199
|
-
end
|
200
|
-
end
|
201
|
-
|
202
|
-
def clear_redirect_cookie!
|
203
|
-
return unless @order.present?
|
204
|
-
|
205
|
-
session["effective_orders_#{@order.id}_purchased_url"] = nil
|
206
|
-
session["effective_orders_#{@order.id}_declined_url"] = nil
|
207
|
-
end
|
208
|
-
|
209
156
|
# StrongParameters
|
210
157
|
def checkout_params
|
211
158
|
params.require(:effective_order).permit(EffectiveOrders.permitted_params)
|
@@ -213,9 +160,7 @@ module Effective
|
|
213
160
|
|
214
161
|
def set_page_title
|
215
162
|
@page_title ||= case params[:action]
|
216
|
-
when 'index' ; '
|
217
|
-
when 'my_purchases' ; 'Order History'
|
218
|
-
when 'my_sales' ; 'Sales History'
|
163
|
+
when 'index' ; 'Order History'
|
219
164
|
when 'purchased' ; 'Thank You'
|
220
165
|
when 'declined' ; 'Payment Declined'
|
221
166
|
else 'Checkout'
|