Commit fc725ee2 authored by Artem's avatar Artem

imporve cart controller and model methods

parent 32f811cc
...@@ -2,10 +2,9 @@ ...@@ -2,10 +2,9 @@
namespace App; namespace App;
//use Illuminate\Database\Eloquent\Model;
use App\Product; use App\Product;
class Cart /*extends Model*/ class Cart
{ {
public function __construct() public function __construct()
{ {
...@@ -39,7 +38,6 @@ class Cart /*extends Model*/ ...@@ -39,7 +38,6 @@ class Cart /*extends Model*/
$this->items[$id] = [ $this->items[$id] = [
'qty' => 1 'qty' => 1
]; ];
} }
$this->updateTotalPosAmount(); $this->updateTotalPosAmount();
...@@ -57,10 +55,6 @@ class Cart /*extends Model*/ ...@@ -57,10 +55,6 @@ class Cart /*extends Model*/
$this->addItem($product_id); $this->addItem($product_id);
$this->items[$product_id]['qty'] = $changed_qty; $this->items[$product_id]['qty'] = $changed_qty;
} }
$this->updateCurrentItems();
$this->updatePrices();
} }
public function removeItem($id) public function removeItem($id)
......
...@@ -12,16 +12,7 @@ class CartController extends Controller ...@@ -12,16 +12,7 @@ class CartController extends Controller
{ {
public function index() public function index()
{ {
if (!Session::has('cart')) { return view('cart');
return view('cart');
}
$cart = Session::get('cart');
// need to take products from database because product data may change
$cart->updateCurrentItems();
return view('cart', compact('cart'));
} }
public function addToCart(Product $product) public function addToCart(Product $product)
...@@ -41,31 +32,23 @@ class CartController extends Controller ...@@ -41,31 +32,23 @@ class CartController extends Controller
public function updateQtyInCart(Request $request) public function updateQtyInCart(Request $request)
{ {
if (!Session::has('cart')) { if (!Session::has('cart')) {
return route('homepage'); $cart = new Cart();
$cart->addItem($request->productId);
Session::put('cart', $cart);
} }
$cart = Session::get('cart'); $cart = Session::get('cart');
$cart->updateQty($request->productId, $request->changedQty); $cart->updateQty($request->productId, $request->changedQty);
if (!$cart->total_qty) {
Session::forget('cart');
return route('homepage');
}
} }
public function removeFromCart(Request $request) public function removeFromCart(Request $request)
{ {
$cart = Session::get('cart'); if (!Session::has('cart')) {
return ['redirectLinkWhenEmpty' => route('homepage')];
$cart->removeItem($request->productId);
if (!$cart->total_qty) {
Session::forget('cart');
return route('homepage');
} }
$cart->updateCurrentItems(); $cart = Session::get('cart');
$cart->removeItem($request->productId);
} }
public function clearCart() public function clearCart()
...@@ -78,6 +61,13 @@ class CartController extends Controller ...@@ -78,6 +61,13 @@ class CartController extends Controller
{ {
$cart = Session::get('cart'); $cart = Session::get('cart');
if (!$cart->total_qty) {
Session::forget('cart');
return ['redirectLinkWhenEmpty' => route('homepage')];
}
$cart->updateCurrentItems();
// make array of products in order to get correct order of items in js // make array of products in order to get correct order of items in js
$cart_products = []; $cart_products = [];
foreach ($cart->items as $item) { foreach ($cart->items as $item) {
......
...@@ -60,17 +60,15 @@ class Cart { ...@@ -60,17 +60,15 @@ class Cart {
productId: productId, productId: productId,
}) })
.then( (response) => { .then( (response) => {
const redirectLinkWhenCartIsEmpty = response.data; const redirectLinkWhenEmpty = response.data.redirectLinkWhenEmpty;
if (redirectLinkWhenEmpty) {
if (redirectLinkWhenCartIsEmpty) { window.location.replace(redirectLinkWhenEmpty);
window.location.replace(redirectLinkWhenCartIsEmpty); return;
} else {
document.querySelector('.js-cart').removeEventListener('click', this.bindedRemoveItemFromCart);
this.show();
toastr.success('Product deleted');
} }
document.querySelector('.js-cart').removeEventListener('click', this.bindedRemoveItemFromCart);
this.show();
toastr.success('Product deleted');
}) })
.catch(function (error) { .catch(function (error) {
console.log(error); console.log(error);
...@@ -82,7 +80,7 @@ class Cart { ...@@ -82,7 +80,7 @@ class Cart {
setUpdateItemQtyEventListener() { setUpdateItemQtyEventListener() {
document.querySelectorAll('.js-qty-input').forEach(changeQtyInput => { document.querySelectorAll('.js-qty-input').forEach(changeQtyInput => {
let isChanged; let isChanged;
changeQtyInput.addEventListener('input', (event) => { changeQtyInput.addEventListener('change', (event) => {
if (isChanged) { if (isChanged) {
return; return;
} }
...@@ -97,17 +95,9 @@ class Cart { ...@@ -97,17 +95,9 @@ class Cart {
changedQty: event.target.value, changedQty: event.target.value,
}) })
.then( (response) => { .then( (response) => {
const redirectLinkWhenCartIsEmpty = response.data; document.querySelector('.js-cart').removeEventListener('click', this.bindedRemoveItemFromCart);
this.show();
if (redirectLinkWhenCartIsEmpty) { toastr.success('Quantity updated');
window.location.replace(redirectLinkWhenCartIsEmpty);
} else {
if (this.bindedRemoveItemFromCart) {
document.querySelector('.js-cart').removeEventListener('click', this.bindedRemoveItemFromCart);
}
this.show();
toastr.success('Quantity updated');
}
}) })
.catch(function (error) { .catch(function (error) {
console.log(error); console.log(error);
...@@ -129,6 +119,12 @@ class Cart { ...@@ -129,6 +119,12 @@ class Cart {
show() { show() {
axios.get(this.getItemsUrl) axios.get(this.getItemsUrl)
.then( response => { .then( response => {
const redirectLinkWhenEmpty = response.data.redirectLinkWhenEmpty;
if (redirectLinkWhenEmpty) {
window.location.replace(redirectLinkWhenEmpty);
return;
}
this.products = response.data.products; this.products = response.data.products;
this.positionsAmount = response.data.cart.total_qty; this.positionsAmount = response.data.cart.total_qty;
this.totalPrice = response.data.cart.total_price; this.totalPrice = response.data.cart.total_price;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment