class StoreController < ApplicationController
+ before_filter :find_cart, :except => :empty_cart
+
def index
@products = Product.find_products_for_sale
- @cart = find_cart
+# @cart = find_cart
end
def add_to_cart
product = Product.find(params[:id])
- @cart = find_cart
+# @cart = find_cart
@current_item = @cart.add_product(product)
respond_to do |format|
- format.js
+ format.js if request.xhr?
+ format.html {redirect_to_index}
end
rescue ActiveRecord::RecordNotFound
logger.error("Attempt to access invalid product #{params[:id]}" )
def empty_cart
session[:cart] = nil
- redirect_to_index('Your cart has been emptied')
+ redirect_to_index unless request.xhr?
+ end
+
+ def checkout
+# @cart = find_cart
+ if @cart.items.empty?
+ redirect_to_index("Your cart is empty" )
+ else
+ @order = Order.new
+ @during_checkout = true
+ respond_to do |format|
+ format.js if request.xhr?
+ format.html
+ end
+ end
+ end
+
+ def save_order
+# @cart = find_cart
+ @order = Order.new(params[:order])
+ # @order.add_line_items_from_cart(@cart)
+ @cart.items.each do |item|
+ li = LineItem.new
+ li.product = item.product
+ li.quantity = item.quantity
+ li.total_price = item.price
+ @order.line_items << li
+ end
+ if @order.save
+ session[:cart] = nil
+ redirect_to_index("Thank you for your order")
+ else
+ render :action => 'checkout'
+ end
+ @during_checkout = false
end
+
+protected
+
+ # No authorization needed for the store
+ def authorize
+ end
+
private
def find_cart
- session[:cart] ||= Cart.new
+ @cart = (session[:cart] ||= Cart.new)
end
def redirect_to_index(msg = nil)