pdfshop/app/controllers/cart_controller.rb

98 lines
3.3 KiB
Ruby

# Support for shopping cart
class CartController < ShopController
def cart
add_breadcrumb 'Koszyk', '/cart/cart'
end
def add_to_cart
@product = Product.where('slug = ? AND active = 1', params[:id]).first
if @cart.blank?
@cart = Cart.new(uuid: cookie_cart_number)
@cart.save
end
if @product
if @product.chk_quantity
if @product.qty > 0 && @product.qty >= params[:qty].to_i
# rezerwujemy ta ilosc produktow
# i wrzucamy do koszyka
add_product_to_cart(@cart, @product, params[:qty].to_i)
@message = ['success', 'Dodano do koszyka']
elsif @product.qty > 0 && @product.qty < params[:qty].to_i
# zamawiona ilosc jest mniejsza od dostepnej ilosci
# obnizamy ilosc produktow dla klienta i rezerwujemy ta ilosc
add_product_to_cart(@cart, @product, @product.qty)
# informujemy o zmniejszeniu ilosci produktow w koszyku
@message = ['info', "Dodano do koszyka tylko #{@product.qty} szt."]
else
# za malo produktow
# informujemy o tym fakcie, ze produkt sie skonczyl
@message = ['warn', "Produkt #{@product.name} został sprzedany"]
end
else
# jesli nie sprawdzamy ilosci produktu
# to wrzucamy zamowiona ilosc do koszyka
add_product_to_cart(@cart, @product, params[:qty].to_i)
@message = ['success', 'Dodano do koszyka']
end
else
# brak takiego produktu
@message = ['error', 'Brak takiego produktu']
end
end
def remove_from_cart
@product = Product.where('slug = ?', params[:id]).first
return unless @cart && @product
pr = @cart.cart_products.where(product_id: @product.id).first
unless pr.blank?
pr.destroy
end
end
def change_qty
id = params[:id].split('_')[2]
@cart_product = CartProduct.where(id: id).first
product = @cart_product.product
if product.chk_quantity
if product.qty > 0 && product.qty >= params[:qty].to_i
# rezerwujemy ta ilosc produktow
# i wrzucamy do koszyka
add_product_to_cart(@cart, product, params[:qty].to_i)
@message = ['success', 'Zmieniono zawartość koszyka']
elsif product.qty > 0 && product.qty < params[:qty].to_i
# zamawiona ilosc jest mniejsza od dostepnej ilosci
# obnizamy ilosc produktow dla klienta i rezerwujemy ta ilosc
add_product_to_cart(@cart, product, product.qty)
# informujemy o zmniejszeniu ilosci produktow w koszyku
@message = ['info', "Dodano do koszyka tylko #{product.qty} szt."]
else
# za malo produktow
# informujemy o tym fakcie, ze produkt sie skonczyl
# i usuwamy go z koszyka
@message = ['warn', "Produkt #{product.name} został sprzedany"]
end
else
# jesli nie sprawdzamy ilosci produktu
# to wrzucamy zamowiona ilosc do koszyka
add_product_to_cart(@cart, product, params[:qty].to_i)
@message = ['success', 'Zmieniono zawartość koszyka']
end
@cart_product.reload
end
def clear
@cart.cart_products.destroy_all
end
private
def add_product_to_cart(cart, product, qty)
cp = cart.cart_products.where(product_id: product.id).first
cp = CartProduct.new(cart_id: cart.id, product_id: product.id) if cp.blank?
cp.quantity = qty
cp.price = product.price
cp.save
end
end