# 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