comable_frontend 0.2.3 → 0.3.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/Rakefile +16 -4
- data/app/assets/javascripts/comable/frontend/application.coffee +5 -0
- data/app/assets/stylesheets/comable/frontend/application.scss +434 -0
- data/app/assets/stylesheets/comable/frontend/products.scss +0 -0
- data/app/assets/stylesheets/comable/products.scss +0 -0
- data/app/controllers/comable/application_controller.rb +2 -0
- data/app/controllers/comable/carts_controller.rb +32 -17
- data/app/controllers/comable/customers_controller.rb +5 -5
- data/app/controllers/comable/orders_controller.rb +31 -71
- data/app/controllers/comable/products_controller.rb +15 -1
- data/app/controllers/concerns/comable/payment_action.rb +3 -13
- data/app/controllers/concerns/comable/shipment_action.rb +2 -12
- data/app/controllers/concerns/comable/signin_action.rb +55 -0
- data/app/views/comable/carts/show.slim +65 -20
- data/app/views/comable/customers/_address.slim +7 -7
- data/app/views/comable/customers/addresses.slim +31 -29
- data/app/views/comable/customers/show.slim +60 -2
- data/app/views/comable/orders/confirm.slim +73 -30
- data/app/views/comable/orders/create.slim +6 -4
- data/app/views/comable/orders/delivery.slim +23 -14
- data/app/views/comable/orders/orderer.slim +38 -20
- data/app/views/comable/orders/payment.slim +12 -11
- data/app/views/comable/orders/shipment.slim +12 -10
- data/app/views/comable/orders/signin.slim +22 -0
- data/app/views/comable/products/index.slim +30 -10
- data/app/views/comable/products/show.slim +89 -21
- data/app/views/comable/shared/_address.slim +13 -20
- data/app/views/comable/shared/_address_form.slim +33 -15
- data/app/views/comable/shared/_footer.slim +2 -0
- data/app/views/comable/shared/_header.slim +74 -0
- data/app/views/comable/shared/_header_for_checkout.slim +18 -0
- data/app/views/kaminari/comable_frontend/_gap.html.slim +2 -0
- data/app/views/kaminari/comable_frontend/_next_page.html.slim +7 -0
- data/app/views/kaminari/comable_frontend/_page.html.slim +3 -0
- data/app/views/kaminari/comable_frontend/_paginator.html.slim +11 -0
- data/app/views/kaminari/comable_frontend/_prev_page.html.slim +7 -0
- data/app/views/layouts/comable/application.slim +23 -14
- data/config/routes.rb +9 -12
- data/lib/comable/frontend/engine.rb +8 -0
- metadata +151 -7
- data/app/controllers/concerns/comable/permitted_attributes.rb +0 -15
- data/app/views/comable/orders/new.slim +0 -4
File without changes
|
File without changes
|
@@ -1,37 +1,52 @@
|
|
1
1
|
module Comable
|
2
2
|
class CartsController < Comable::ApplicationController
|
3
|
-
|
3
|
+
before_filter :set_cart_item, only: [:add, :update]
|
4
|
+
before_filter :ensure_found_cart_item, only: [:add, :update]
|
4
5
|
|
5
6
|
def add
|
6
|
-
cart_item
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
redirect_to cart_path
|
7
|
+
if current_customer.add_cart_item(@cart_item, cart_item_options)
|
8
|
+
redirect_to comable.cart_path, notice: Comable.t('carts.added')
|
9
|
+
else
|
10
|
+
flash.now[:alert] = Comable.t('carts.invalid')
|
11
|
+
render :show
|
12
|
+
end
|
13
13
|
end
|
14
14
|
|
15
15
|
def update
|
16
|
+
if current_customer.reset_cart_item(@cart_item, cart_item_options)
|
17
|
+
redirect_to comable.cart_path, notice: Comable.t('carts.updated')
|
18
|
+
else
|
19
|
+
flash.now[:alert] = Comable.t('carts.invalid')
|
20
|
+
render :show
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
def destroy
|
16
25
|
cart_item = find_cart_item
|
17
26
|
return redirect_by_product_not_found unless cart_item
|
18
27
|
|
19
|
-
current_customer.reset_cart_item(cart_item
|
28
|
+
if current_customer.reset_cart_item(cart_item)
|
29
|
+
redirect_to comable.cart_path, notice: Comable.t('carts.updated')
|
30
|
+
else
|
31
|
+
flash.now[:alert] = Comable.t('carts.invalid')
|
32
|
+
render :show
|
33
|
+
end
|
34
|
+
end
|
20
35
|
|
21
|
-
|
22
|
-
|
36
|
+
def checkout
|
37
|
+
current_order.next_state if current_order.state?(:cart)
|
38
|
+
redirect_to comable.next_order_path(state: :confirm)
|
23
39
|
end
|
24
40
|
|
25
41
|
private
|
26
42
|
|
27
|
-
def
|
28
|
-
|
29
|
-
redirect_to :back
|
43
|
+
def set_cart_item
|
44
|
+
@cart_item = find_cart_item
|
30
45
|
end
|
31
46
|
|
32
|
-
def
|
33
|
-
|
34
|
-
redirect_to
|
47
|
+
def ensure_found_cart_item
|
48
|
+
return if @cart_item
|
49
|
+
redirect_to :back, alert: Comable.t('errors.messages.products_not_found')
|
35
50
|
end
|
36
51
|
|
37
52
|
def find_cart_item
|
@@ -5,17 +5,17 @@ module Comable
|
|
5
5
|
before_filter :authenticate_customer!
|
6
6
|
|
7
7
|
def show
|
8
|
+
@orders = current_customer.orders.page(params[:page]).per(Comable::Config.orders_per_page)
|
8
9
|
end
|
9
10
|
|
10
|
-
def
|
11
|
-
return unless request.put?
|
12
|
-
|
11
|
+
def update_addresses
|
13
12
|
current_customer.attributes = customer_params
|
14
13
|
if current_customer.save
|
15
|
-
flash.now[:notice] = '
|
14
|
+
flash.now[:notice] = Comable.t('successful')
|
16
15
|
else
|
17
|
-
flash.now[:alert] = '
|
16
|
+
flash.now[:alert] = Comable.t('failure')
|
18
17
|
end
|
18
|
+
render :addresses
|
19
19
|
end
|
20
20
|
|
21
21
|
def customer_params
|
@@ -1,45 +1,38 @@
|
|
1
1
|
module Comable
|
2
2
|
class OrdersController < Comable::ApplicationController
|
3
|
-
prepend Comable::ShipmentAction
|
4
|
-
prepend Comable::PaymentAction
|
5
|
-
include Comable::PermittedAttributes
|
6
|
-
|
7
|
-
helper_method :next_order_path
|
8
|
-
|
9
3
|
# TODO: Change the method name to load_order_with_params
|
10
4
|
before_filter :load_order
|
11
|
-
before_filter :
|
12
|
-
|
13
|
-
after_filter :save_order, except: :create
|
14
|
-
|
15
|
-
rescue_from Comable::InvalidOrder, with: :order_invalid
|
5
|
+
before_filter :ensure_cart_not_empty
|
6
|
+
before_filter :ensure_saleable_stocks
|
16
7
|
|
17
|
-
|
18
|
-
|
19
|
-
|
8
|
+
prepend Comable::SigninAction
|
9
|
+
prepend Comable::ShipmentAction
|
10
|
+
prepend Comable::PaymentAction
|
11
|
+
include Comable::PermittedAttributes
|
20
12
|
|
21
|
-
def
|
22
|
-
|
23
|
-
|
24
|
-
|
13
|
+
def edit
|
14
|
+
if @order.state?(params[:state]) || @order.stated?(params[:state])
|
15
|
+
render params[:state]
|
16
|
+
else
|
17
|
+
redirect_to next_order_path
|
25
18
|
end
|
26
19
|
end
|
27
20
|
|
28
|
-
def
|
29
|
-
|
30
|
-
|
31
|
-
|
21
|
+
def update
|
22
|
+
if @order.stated?(params[:state]) ? @order.save : @order.next_state
|
23
|
+
redirect_to next_order_path
|
24
|
+
else
|
25
|
+
render @order.state
|
32
26
|
end
|
33
27
|
end
|
34
28
|
|
35
29
|
def create
|
36
|
-
order
|
37
|
-
|
38
|
-
flash[:notice] = I18n.t('comable.orders.success')
|
30
|
+
if @order.state?(:confirm) && @order.next_state
|
31
|
+
flash.now[:notice] = Comable.t('orders.success')
|
39
32
|
send_order_complete_mail
|
40
33
|
else
|
41
|
-
flash[:alert] =
|
42
|
-
redirect_to
|
34
|
+
flash[:alert] = Comable.t('orders.failure')
|
35
|
+
redirect_to next_order_path
|
43
36
|
end
|
44
37
|
end
|
45
38
|
|
@@ -49,53 +42,27 @@ module Comable
|
|
49
42
|
Comable::OrderMailer.complete(@order).deliver if current_store.email_activate?
|
50
43
|
end
|
51
44
|
|
52
|
-
|
53
|
-
# rubocop:disable all
|
54
|
-
def next_order_path(target_action_name = nil)
|
55
|
-
case (target_action_name || action_name).to_sym
|
56
|
-
when :new
|
57
|
-
orderer_required? ? comable.orderer_order_path : next_order_path(:orderer)
|
58
|
-
when :orderer
|
59
|
-
delivery_required? ? comable.delivery_order_path : next_order_path(:delivery)
|
60
|
-
when :delivery
|
61
|
-
shipment_required? ? comable.shipment_order_path : next_order_path(:shipment)
|
62
|
-
when :shipment
|
63
|
-
payment_required? ? comable.payment_order_path : next_order_path(:payment)
|
64
|
-
else
|
65
|
-
comable.confirm_order_path
|
66
|
-
end
|
67
|
-
end
|
68
|
-
# rubocop:enable all
|
69
|
-
|
70
|
-
def agreement_required?
|
71
|
-
@order.customer.nil?
|
72
|
-
end
|
73
|
-
|
74
|
-
def orderer_required?
|
75
|
-
@order.bill_address.nil?
|
76
|
-
end
|
77
|
-
|
78
|
-
def delivery_required?
|
79
|
-
@order.ship_address.nil?
|
80
|
-
end
|
81
|
-
|
82
|
-
def verify
|
45
|
+
def ensure_cart_not_empty
|
83
46
|
return if current_customer.cart.any?
|
84
|
-
flash[:alert] =
|
47
|
+
flash[:alert] = Comable.t('carts.empty')
|
85
48
|
redirect_to comable.cart_path
|
86
49
|
end
|
87
50
|
|
88
|
-
def
|
89
|
-
|
51
|
+
def ensure_saleable_stocks
|
52
|
+
return if current_order.soldout_stocks.empty?
|
53
|
+
flash[:alert] = Comable.t('errors.messages.products_soldout')
|
54
|
+
redirect_to comable.cart_path
|
90
55
|
end
|
91
56
|
|
92
|
-
def
|
93
|
-
@order
|
57
|
+
def load_order
|
58
|
+
@order = current_order
|
59
|
+
@order.attributes = order_params if order_params
|
94
60
|
end
|
95
61
|
|
96
62
|
def order_params
|
97
63
|
return unless params[:order]
|
98
|
-
|
64
|
+
return unless params[:state]
|
65
|
+
case params[:state].to_sym
|
99
66
|
when :orderer
|
100
67
|
order_params_for_orderer
|
101
68
|
when :delivery
|
@@ -105,8 +72,6 @@ module Comable
|
|
105
72
|
|
106
73
|
def order_params_for_orderer
|
107
74
|
params.require(:order).permit(
|
108
|
-
:family_name, # TODO: Remove
|
109
|
-
:first_name, # TODO: Remove
|
110
75
|
:email,
|
111
76
|
bill_address_attributes: permitted_address_attributes
|
112
77
|
)
|
@@ -117,10 +82,5 @@ module Comable
|
|
117
82
|
ship_address_attributes: permitted_address_attributes
|
118
83
|
)
|
119
84
|
end
|
120
|
-
|
121
|
-
def order_invalid
|
122
|
-
flash[:alert] = I18n.t('comable.orders.failure')
|
123
|
-
redirect_to comable.cart_path
|
124
|
-
end
|
125
85
|
end
|
126
86
|
end
|
@@ -1,11 +1,25 @@
|
|
1
1
|
module Comable
|
2
2
|
class ProductsController < Comable::ApplicationController
|
3
|
+
before_filter :load_category_and_products, only: :index
|
4
|
+
|
3
5
|
def index
|
4
|
-
@products = Comable::
|
6
|
+
@products = @products.page(params[:page]).per(Comable::Config.products_per_page)
|
5
7
|
end
|
6
8
|
|
7
9
|
def show
|
8
10
|
@product = Comable::Product.find(params[:id])
|
9
11
|
end
|
12
|
+
|
13
|
+
private
|
14
|
+
|
15
|
+
def load_category_and_products
|
16
|
+
@category = Comable::Category.where(id: params[:category_id]).first
|
17
|
+
if @category
|
18
|
+
subtree_of_category = Comable::Category.subtree_of(@category)
|
19
|
+
@products = Comable::Product.eager_load(:categories).merge(subtree_of_category)
|
20
|
+
else
|
21
|
+
@products = Comable::Product.search(params[:q])
|
22
|
+
end
|
23
|
+
end
|
10
24
|
end
|
11
25
|
end
|
@@ -1,26 +1,16 @@
|
|
1
1
|
module Comable
|
2
2
|
module PaymentAction
|
3
|
-
def payment
|
4
|
-
case request.method_symbol
|
5
|
-
when :post
|
6
|
-
redirect_to next_order_path
|
7
|
-
end
|
8
|
-
end
|
9
|
-
|
10
3
|
private
|
11
4
|
|
12
5
|
# orderride OrdersController#order_params
|
13
6
|
def order_params
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
def payment_required?
|
18
|
-
Comable::Payment.exists?
|
7
|
+
return super unless params[:state] == 'payment'
|
8
|
+
order_params_for_payment
|
19
9
|
end
|
20
10
|
|
21
11
|
def order_params_for_payment
|
22
12
|
params.fetch(:order, {}).permit(
|
23
|
-
:
|
13
|
+
:payment_method_id
|
24
14
|
)
|
25
15
|
end
|
26
16
|
end
|
@@ -1,21 +1,11 @@
|
|
1
1
|
module Comable
|
2
2
|
module ShipmentAction
|
3
|
-
def shipment
|
4
|
-
case request.method_symbol
|
5
|
-
when :post
|
6
|
-
redirect_to next_order_path
|
7
|
-
end
|
8
|
-
end
|
9
|
-
|
10
3
|
private
|
11
4
|
|
12
5
|
# orderride OrdersController#order_params
|
13
6
|
def order_params
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
def shipment_required?
|
18
|
-
Comable::ShipmentMethod.activated.exists?
|
7
|
+
return super unless params[:state] == 'shipment'
|
8
|
+
order_params_for_shipment
|
19
9
|
end
|
20
10
|
|
21
11
|
def order_params_for_shipment
|
@@ -0,0 +1,55 @@
|
|
1
|
+
module Comable
|
2
|
+
module SigninAction
|
3
|
+
class << self
|
4
|
+
def prepended(base)
|
5
|
+
base.instance_eval do
|
6
|
+
before_filter :ensure_signed_in_or_guest, except: [:signin, :guest]
|
7
|
+
|
8
|
+
helper_method :resource
|
9
|
+
helper_method :resource_name
|
10
|
+
helper_method :devise_mapping
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
def guest
|
16
|
+
if @order.state?(:cart) ? @order.next_state : @order.save
|
17
|
+
redirect_to next_order_path
|
18
|
+
else
|
19
|
+
render :signin
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
private
|
24
|
+
|
25
|
+
def ensure_signed_in_or_guest
|
26
|
+
return if @order.email
|
27
|
+
store_location
|
28
|
+
redirect_to comable.signin_order_path
|
29
|
+
end
|
30
|
+
|
31
|
+
def resource
|
32
|
+
current_customer
|
33
|
+
end
|
34
|
+
|
35
|
+
def resource_name
|
36
|
+
:customer
|
37
|
+
end
|
38
|
+
|
39
|
+
def devise_mapping
|
40
|
+
Devise.mappings[resource_name]
|
41
|
+
end
|
42
|
+
|
43
|
+
# orderride OrdersController#order_params
|
44
|
+
def order_params
|
45
|
+
return super unless action_name.in? %w( signin guest )
|
46
|
+
order_params_for_signin
|
47
|
+
end
|
48
|
+
|
49
|
+
def order_params_for_signin
|
50
|
+
params.fetch(:order, {}).permit(
|
51
|
+
:email
|
52
|
+
)
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
@@ -1,22 +1,67 @@
|
|
1
|
-
|
1
|
+
#carts
|
2
|
+
section.cart.col-sm-8
|
3
|
+
h1
|
4
|
+
= Comable.t('shopping_cart')
|
2
5
|
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
li.product
|
9
|
-
h2.name
|
10
|
-
= link_to stock.name_with_sku, comable.product_path(product)
|
11
|
-
.caption
|
12
|
-
= product.caption
|
13
|
-
.price
|
14
|
-
= number_to_currency product.price
|
15
|
-
.quantity
|
16
|
-
- selected = cart_item.quantity
|
17
|
-
= select_tag :quantity, options_for_select(1.upto([10, selected].max).to_a, selected)
|
18
|
-
= hidden_field_tag :stock_id, stock.id
|
19
|
-
= submit_tag '変更'
|
6
|
+
- if current_customer.cart.errors.any?
|
7
|
+
.errors
|
8
|
+
ul
|
9
|
+
- current_customer.cart.errors.full_messages.each do |message|
|
10
|
+
li = message
|
20
11
|
|
21
|
-
.
|
22
|
-
|
12
|
+
- if current_customer.cart.empty?
|
13
|
+
= Comable.t('carts.empty')
|
14
|
+
- else
|
15
|
+
table
|
16
|
+
thead
|
17
|
+
tr
|
18
|
+
th
|
19
|
+
th
|
20
|
+
= Comable.t('price')
|
21
|
+
th
|
22
|
+
= Comable.t('quantity')
|
23
|
+
th
|
24
|
+
|
25
|
+
tbody
|
26
|
+
- current_customer.cart.each do |cart_item|
|
27
|
+
- stock = cart_item.stock
|
28
|
+
- product = stock.product
|
29
|
+
tr
|
30
|
+
td
|
31
|
+
.name
|
32
|
+
= link_to stock.name_with_sku, comable.product_path(product)
|
33
|
+
.caption
|
34
|
+
= product.caption
|
35
|
+
- if cart_item.soldout_stock?
|
36
|
+
.error.soldout = Comable.t('carts.soldout')
|
37
|
+
td.price
|
38
|
+
= number_to_currency product.price
|
39
|
+
td.quantity
|
40
|
+
= form_tag comable.cart_path, method: :put do
|
41
|
+
.form-inline.form-group
|
42
|
+
- selected = cart_item.quantity
|
43
|
+
= select_tag :quantity, options_for_select(1.upto([10, selected].max).to_a, selected)
|
44
|
+
= hidden_field_tag :stock_id, stock.id
|
45
|
+
= submit_tag Comable.t('actions.update'), class: 'btn-default'
|
46
|
+
td
|
47
|
+
= link_to Comable.t('actions.destroy'), comable.cart_path(stock_id: stock.id), method: :delete
|
48
|
+
|
49
|
+
- if current_customer.cart.any?
|
50
|
+
section.order.col-sm-4
|
51
|
+
table
|
52
|
+
thead
|
53
|
+
tr
|
54
|
+
th colspan="2"
|
55
|
+
= form_for current_order, as: :order, url: comable.checkout_cart_path, method: :put do |f|
|
56
|
+
= f.submit Comable.t('checkout'), class: 'btn btn-primary btn-lg btn-block'
|
57
|
+
tbody
|
58
|
+
tr.price
|
59
|
+
th.text-right
|
60
|
+
= Comable.t('item_total_price')
|
61
|
+
td
|
62
|
+
= number_to_currency current_customer.cart.price
|
63
|
+
tr.count
|
64
|
+
th.text-right
|
65
|
+
= Comable.t('item_total_quantity')
|
66
|
+
td
|
67
|
+
= number_with_delimiter current_customer.cart.count
|