Commit bae6f988 by Tran Hoang Viet

VietTH: Fix review code, saperate admin orders controler

parent e6026430
class Admin::OrdersController < ApplicationController
before_action :set_order, only: [:show, :update]
before_action -> { authorize(@order) }, only: [:show, :update]
def index
@orders = Order.all.includes(:user).order(created_at: :desc).page(params[:page])
end
def show
end
def update
if order_service.update(@order, order_params)[:status].present?
redirect_to admin_orders_path, notice: 'Update order successful!'
else
render :show
end
end
private
def order_params
params.require(:order).permit(:status)
end
def order_service
@order_service ||= OrderService.new(current_user, params)
end
def set_order
@order = Order.find(params[:id])
end
end
\ No newline at end of file
...@@ -4,6 +4,7 @@ class OrdersController < ApplicationController ...@@ -4,6 +4,7 @@ class OrdersController < ApplicationController
before_action -> { authorize(@order) }, only: [:show, :update] before_action -> { authorize(@order) }, only: [:show, :update]
def index def index
@orders = current_user.orders.includes(:user).order(created_at: :desc).page(params[:page])
end end
def create def create
...@@ -21,32 +22,19 @@ class OrdersController < ApplicationController ...@@ -21,32 +22,19 @@ class OrdersController < ApplicationController
end end
end end
def management def checkout
@orders = current_user.admin? ? Order.all : current_user.orders
@orders = @orders.includes(:user).order(created_at: :desc).page(params[:page])
end end
def show def show
end end
def update
if order_service.update(@order, order_params)[:status].present?
redirect_to management_orders_path, notice: 'Update order successful!'
else
render :show
end
end
private private
def cart_params def cart_params
params.require(:cart).permit(items: [:id, :quantity]) params.require(:cart).permit(items: [:id, :quantity])
end end
def order_params
params.require(:order).permit(:status)
end
def order_service def order_service
@order_service ||= OrderService.new(current_user, params) @order_service ||= OrderService.new(current_user, params)
end end
......
%h3.title Orders management
.module
#orders-list
.order-item.table-responsive
%table.table
%thead
%tr
%td.text-right #
%td Order number
/ %td Ordered by
%td Created at
%td Status
%tbody
- @orders.each_with_index do |order_item, index|
%tr
%td.number.text-right
= index + 1
%td.order-number
= link_to order_item.created_at.to_i, admin_order_path(order_item)
/ %td.created-by
/ = order_item.user.email
%td.created-at
= I18n.l(order_item.created_at)
%td.status{class: order_item.status}
= order_item.decorate.status
%tfooter
%tr
%td{colspan: 10}
= paginate @orders
%h3.title Order detail
#order-detail.module
= form_for @order, url: admin_order_path(@order), html: {class: 'form-horizontal'} do |f|
.form-group
%label.col-md-2.col-sm-3.col-xs-3.control-label Order number
.col-md-4.col-sm-9.col-xs-9.value
= f.object.created_at.to_i
.form-group
%label.col-md-2.col-sm-3.col-xs-3.control-label Created by
.col-md-4.col-sm-9.col-xs-9.value
= f.object.user.email
.form-group
%label.col-md-2.col-sm-3.col-xs-3.control-label Created at
.col-md-4.col-sm-9.col-xs-9.value
= I18n.l(f.object.created_at)
.form-group
%label.col-md-2.col-sm-3.col-xs-3.control-label Total price
.col-md-4.col-sm-9.col-xs-9.value
= f.object.total
.form-group
%label.col-md-2.col-sm-3.col-xs-3.control-label Status
.col-md-2.col-sm-9.col-xs-9.value
- if policy(f.object).update?
= f.select :status, Order.statuses.keys.map { |status| [status.titleize, status] }, {}, class: 'form-control'
- else
= f.object.status.titleize
- if policy(f.object).update?
.form-group
%label.col-md-2.col-sm-3.col-xs-3.control-label
.col-md-2.col-sm-4.col-xs-9
= f.submit 'Save', class: 'btn btn-primary'
.list-order-items.table-responsive
= render '/orders/order_items', order_items: @order.order_items
...@@ -15,4 +15,4 @@ ...@@ -15,4 +15,4 @@
Total: Total:
= current_user.cart.total = current_user.cart.total
.checkout.col-md-12 .checkout.col-md-12
= link_to 'Checkout', orders_path, class: 'btn btn-primary' = link_to 'Checkout', checkout_orders_path, class: 'btn btn-primary'
...@@ -11,8 +11,13 @@ ...@@ -11,8 +11,13 @@
#navbar.navbar-collapse.collapse #navbar.navbar-collapse.collapse
%ul.nav.navbar-nav.navbar-right %ul.nav.navbar-nav.navbar-right
- if user_signed_in? - if user_signed_in?
- if current_user.admin?
%li %li
= link_to 'Orders', management_orders_path = link_to 'Orders', admin_orders_path
- else
%li
= link_to 'Orders', orders_path
%li %li
= link_to 'New product', new_product_path = link_to 'New product', new_product_path
%li %li
......
%h3.title Category %h3.title Category
%ul.nav.nav-sidebar %ul.nav.nav-sidebar
= render Category.limit(Settings.limit_category).select(Category::JSON_DEFAULT) = render partial: '/categories/category', collection: Category.limit(Settings.limit_category).select(Category::JSON_DEFAULT)
\ No newline at end of file \ No newline at end of file
...@@ -9,29 +9,29 @@ ...@@ -9,29 +9,29 @@
%body %body
%nav.navbar.navbar-inverse.navbar-fixed-top %nav.navbar.navbar-inverse.navbar-fixed-top
.container-fluid .container-fluid
= render 'layouts/header' = render '/layouts/header'
#wrapper.container-fluid #wrapper.container-fluid
= render 'layouts/message' = render '/layouts/message'
.row .row
.col-md-6.search-wrapper .col-md-6.search-wrapper
= render 'layouts/search' = render '/layouts/search'
.row .row
.col-md-12 .col-md-12
= render 'layouts/breadcrumb' = render '/layouts/breadcrumb'
#content.row #content.row
.col-md-2.sidebar .col-md-2.sidebar
.row .row
.col-md-12 .col-md-12
= render 'layouts/sidebar' = render '/layouts/sidebar'
.row .row
.col-md-12 .col-md-12
= render 'layouts/cart' = render '/layouts/cart'
.row .row
.col-md-12 .col-md-12
= render 'layouts/share_social' = render '/layouts/share_social'
.col-md-10 .col-md-10
= yield = yield
......
%table.table
%thead
%tr
%td.text-right #
%td Title
%td Price
%td Quantity
%tbody
- order_items.each_with_index do |order_item, index|
%tr
%td.number.text-right
= index + 1
%td.title
= link_to order_item.product.title, product_path(order_item.id)
%td.price
= order_item.product.price
%td.quantity
= order_item.quantity
\ No newline at end of file
%h3.title Checkout
- if cart_valid?
#checkout-cart.table-responsive
= form_for Order.new do |f|
%table.table
%thead
%tr
%td.text-right #
%td Title
%td Price
%td Stock
%td Quantity
%tbody
- current_user.cart.items.each_with_index do |order_item, index|
%tr
%td.number.text-right
= index + 1
%td.title
= link_to order_item.name, product_path(order_item.id)
= hidden_field_tag "cart[items][#{index}][id]", order_item.id
%td.price
= order_item.unit_cost
%td
= order_item.stock
%td.quantity
.customize-spinner.input-group.spinner{"data-trigger" => "spinner"}
= text_field_tag "cart[items][#{index}][quantity]", order_item.quantity, data: {max: order_item.stock, min: 1, step: 1, id: order_item.id}, class: 'form-control'
.input-group-addon
%a.spin-up{"data-spin" => "up", href: "javascript:;"}
%i.fa.fa-sort-up
%a.spin-down{"data-spin" => "down", href: "javascript:;"}
%i.fa.fa-sort-down
%tfoot
%tr
%td#total-price-title.text-right{colspan: 2} Total:
%td#total-price{colspan: 3}
= format_price(current_user.cart.total)
%tr
%td.no-border.text-right{colspan: 5}
= f.submit 'Checkout', class: 'btn btn-primary'
:javascript
var items = #{current_user.cart.items.to_json.html_safe}
window.orderLib.setOptions({items: items})
window.orderLib.setEventChangeQuantity()
\ No newline at end of file
%h3.title Checkout %h3.title Orders management
.module
- if cart_valid? #orders-list
#checkout-cart.table-responsive .order-item.table-responsive
= form_for Order.new do |f|
%table.table %table.table
%thead %thead
%tr %tr
%td.text-right # %td.text-right #
%td Title %td Order number
%td Price / %td Ordered by
%td Stock %td Created at
%td Quantity %td Status
%tbody %tbody
- current_user.cart.items.each_with_index do |order_item, index| - @orders.each_with_index do |order_item, index|
%tr %tr
%td.number.text-right %td.number.text-right
= index + 1 = index + 1
%td.title %td.order-number
= link_to order_item.name, product_path(order_item.id) = link_to order_item.created_at.to_i, order_path(order_item)
= hidden_field_tag "cart[items][#{index}][id]", order_item.id / %td.created-by
%td.price / = order_item.user.email
= order_item.unit_cost %td.created-at
%td = I18n.l(order_item.created_at)
= order_item.stock %td.status{class: order_item.status}
%td.quantity = order_item.decorate.status
.customize-spinner.input-group.spinner{"data-trigger" => "spinner"}
= text_field_tag "cart[items][#{index}][quantity]", order_item.quantity, data: {max: order_item.stock, min: 1, step: 1, id: order_item.id}, class: 'form-control'
.input-group-addon
%a.spin-up{"data-spin" => "up", href: "javascript:;"}
%i.fa.fa-sort-up
%a.spin-down{"data-spin" => "down", href: "javascript:;"}
%i.fa.fa-sort-down
%tfoot
%tr
%td#total-price-title.text-right{colspan: 2} Total:
%td#total-price{colspan: 3}
= format_price(current_user.cart.total)
%tfooter
%tr %tr
%td.no-border.text-right{colspan: 5} %td{colspan: 10}
= f.submit 'Checkout', class: 'btn btn-primary' = paginate @orders
:javascript
var items = #{current_user.cart.items.to_json.html_safe}
window.orderLib.setOptions({items: items})
window.orderLib.setEventChangeQuantity()
\ No newline at end of file
%h3.title Orders management
.module
#orders-list
.order-item.table-responsive
%table.table
%thead
%tr
%td.text-right #
%td Order number
/ %td Ordered by
%td Created at
%td Status
%tbody
- @orders.each_with_index do |order_item, index|
%tr
%td.number.text-right
= index + 1
%td.order-number
= link_to order_item.created_at.to_i, order_path(order_item)
/ %td.created-by
/ = order_item.user.email
%td.created-at
= I18n.l(order_item.created_at)
%td.status{class: order_item.status}
= order_item.decorate.status
%tfooter
%tr
%td{colspan: 10}
= paginate @orders
...@@ -34,23 +34,7 @@ ...@@ -34,23 +34,7 @@
%label.col-md-2.col-sm-3.col-xs-3.control-label %label.col-md-2.col-sm-3.col-xs-3.control-label
.col-md-2.col-sm-4.col-xs-9 .col-md-2.col-sm-4.col-xs-9
= f.submit 'Save', class: 'btn btn-primary' = f.submit 'Save', class: 'btn btn-primary'
.list-order-items.table-responsive .list-order-items.table-responsive
%table.table = render '/orders/order_items', order_items: @order.order_items
%thead
%tr
%td.text-right #
%td Title
%td Price
%td Quantity
%tbody
- @order.order_items.each_with_index do |order_item, index|
%tr
%td.number.text-right
= index + 1
%td.title
= link_to order_item.product.title, product_path(order_item.id)
%td.price
= order_item.product.price
%td.quantity
= order_item.quantity
...@@ -16,7 +16,11 @@ Rails.application.routes.draw do ...@@ -16,7 +16,11 @@ Rails.application.routes.draw do
resources :orders do resources :orders do
collection do collection do
get :management get :checkout
end end
end end
namespace :admin do
resources :orders
end
end end
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment