Class: Piggybak::OrdersController
- Inherits:
-
ApplicationController
- Object
- ApplicationController
- Piggybak::OrdersController
- Defined in:
- app/controllers/piggybak/orders_controller.rb
Instance Method Summary collapse
- #cancel ⇒ Object
- #download ⇒ Object
- #email ⇒ Object
- #geodata ⇒ Object
- #list ⇒ Object
- #receipt ⇒ Object
-
#shipping ⇒ Object
AJAX Actions from checkout.
- #submit ⇒ Object
- #tax ⇒ Object
Instance Method Details
#cancel ⇒ Object
106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 |
# File 'app/controllers/piggybak/orders_controller.rb', line 106 def cancel order = Piggybak::Order.where(id: params[:id]).first if can?(:cancel, order) order.recorded_changer = current_user.id order.disable_order_notes = true order.line_items.each do |line_item| if line_item.line_item_type != "payment" line_item.mark_for_destruction end end order.update_attribute(:total, 0.00) order.update_attribute(:to_be_cancelled, true) OrderNote.create(:order_id => order.id, :note => "Order set to cancelled. Line items, shipments, tax removed.", :user_id => current_user.id) flash[:notice] = "Order #{order.id} set to cancelled. Order is now in unbalanced state." else flash[:error] = "You do not have permission to cancel this order." end redirect_to rails_admin.edit_path('Piggybak::Order', order.id) end |
#download ⇒ Object
84 85 86 87 88 89 90 91 92 |
# File 'app/controllers/piggybak/orders_controller.rb', line 84 def download @order = Piggybak::Order.where(id: params[:id]).first if can?(:download, @order) render :layout => false else render "no_access" end end |
#email ⇒ Object
94 95 96 97 98 99 100 101 102 103 104 |
# File 'app/controllers/piggybak/orders_controller.rb', line 94 def email order = Piggybak::Order.where(id: params[:id]).first if can?(:email, order) Piggybak::Notifier.order_notification(order).deliver flash[:notice] = "Email notification sent." OrderNote.create(:order_id => order.id, :note => "Email confirmation manually sent.", :user_id => current_user.id) end redirect_to rails_admin.edit_path('Piggybak::Order', order.id) end |
#geodata ⇒ Object
146 147 148 149 150 151 152 153 |
# File 'app/controllers/piggybak/orders_controller.rb', line 146 def geodata countries = ::Piggybak::Country.all.includes(:states) data = countries.inject({}) do |h, country| h["country_#{country.id}"] = country.states h end render :json => { :countries => data } end |
#list ⇒ Object
80 81 82 |
# File 'app/controllers/piggybak/orders_controller.rb', line 80 def list redirect_to main_app.root_url if current_user.nil? end |
#receipt ⇒ Object
69 70 71 72 73 74 75 76 77 78 |
# File 'app/controllers/piggybak/orders_controller.rb', line 69 def receipt response.headers['Cache-Control'] = 'no-cache' if !session.has_key?(:last_order) redirect_to main_app.root_url return end @order = Piggybak::Order.where(id: session[:last_order]).first end |
#shipping ⇒ Object
AJAX Actions from checkout
132 133 134 135 136 137 |
# File 'app/controllers/piggybak/orders_controller.rb', line 132 def shipping cart = Piggybak::Cart.new(request.["cart"]) cart.set_extra_data(params) shipping_methods = Piggybak::ShippingMethod.lookup_methods(cart) render :json => shipping_methods end |
#submit ⇒ Object
3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 |
# File 'app/controllers/piggybak/orders_controller.rb', line 3 def submit response.headers['Cache-Control'] = 'no-cache' @cart = Piggybak::Cart.new(request.["cart"]) if request.post? logger = Logger.new("#{Rails.root}/#{Piggybak.config.logging_file}") begin ActiveRecord::Base.transaction do @order = Piggybak::Order.new(orders_params) @order.create_payment_shipment if Piggybak.config.logging clean_params = params[:order].clone clean_params[:line_items_attributes].each do |k, li_attr| if li_attr[:line_item_type] == "payment" && li_attr.has_key?(:payment_attributes) if li_attr[:payment_attributes].has_key?(:number) li_attr[:payment_attributes][:number] = li_attr[:payment_attributes][:number].mask_cc_number end if li_attr[:payment_attributes].has_key?(:verification_value) li_attr[:payment_attributes][:verification_value] = li_attr[:payment_attributes][:verification_value].mask_csv end end end logger.info "#{request.remote_ip}:#{Time.now.strftime("%Y-%m-%d %H:%M")} Order received with params #{clean_params.inspect}" end @order.initialize_user(current_user) @order.ip_address = request.remote_ip @order.user_agent = request.user_agent @order.add_line_items(@cart) if Piggybak.config.logging logger.info "#{request.remote_ip}:#{Time.now.strftime("%Y-%m-%d %H:%M")} Order contains: #{cookies["cart"]} for user #{current_user ? current_user.email : 'guest'}" end if @order.save if Piggybak.config.logging logger.info "#{request.remote_ip}:#{Time.now.strftime("%Y-%m-%d %H:%M")} Order saved: #{@order.inspect}" end ["cart"] = { :value => '', :path => '/' } session[:last_order] = @order.id redirect_to piggybak.receipt_url else if Piggybak.config.logging logger.warn "#{request.remote_ip}:#{Time.now.strftime("%Y-%m-%d %H:%M")} Order failed to save #{@order.errors.full_messages} with #{@order.inspect}." end raise Exception, @order.errors. end end rescue Exception => e if Piggybak.config.logging logger.warn "#{request.remote_ip}:#{Time.now.strftime("%Y-%m-%d %H:%M")} Order exception: #{e.inspect}" end if @order.errors.empty? @order.errors[:base] << "Your order could not go through. Please try again." end end else @order = Piggybak::Order.new @order.create_payment_shipment @order.initialize_user(current_user) end end |
#tax ⇒ Object
139 140 141 142 143 144 |
# File 'app/controllers/piggybak/orders_controller.rb', line 139 def tax cart = Piggybak::Cart.new(request.["cart"]) cart.set_extra_data(params) total_tax = Piggybak::TaxMethod.calculate_tax(cart) render :json => { :tax => total_tax } end |