98 lines
3.3 KiB
Ruby
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
|