class StoreController < ApplicationController
+ before_filter :find_cart, :except => :empty_cart
+
def index
@products = Product.find_products_for_sale
+# @cart = find_cart
+ end
+
+ def add_to_cart
+ product = Product.find(params[:id])
+# @cart = find_cart
+ @current_item = @cart.add_product(product)
+ respond_to do |format|
+ format.js if request.xhr?
+ format.html {redirect_to_index}
+ end
+ rescue ActiveRecord::RecordNotFound
+ logger.error("Attempt to access invalid product #{params[:id]}" )
+ redirect_to_index('Invalid product')
+ end
+
+ def empty_cart
+ session[:cart] = nil
+ 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
+ @cart = (session[:cart] ||= Cart.new)
+ end
+
+ def redirect_to_index(msg = nil)
+ flash[:notice] = msg if msg
+ redirect_to :action => 'index'
+ end
+
end