cart_instance = $cartInstance; if ($sale) { $this->sale = $sale; $this->global_discount = $sale->discount_percentage; $this->global_tax = $sale->tax_percentage; $this->shipping = $sale->shipping_amount; $this->updatedGlobalTax(); $this->updatedGlobalDiscount(); $sale_details = $this->sale->saleDetails; foreach ($sale_details as $sale_detail) { $this->check_quantity[$sale_detail->product_id] = [$sale_detail->product->product_quantity]; $this->quantity[$sale_detail->product_id] = $sale_detail->quantity; $this->discount_type[$sale_detail->product_id] = 'fixed'; $this->item_discount[$sale_detail->product_id] = $sale_detail->product_discount_amount; } } else { $this->global_discount = 0; $this->global_tax = 0; $this->shipping = 0.00; $this->check_quantity = []; $this->quantity = []; $this->discount_type = []; $this->item_discount = []; } } public function render() { $cart_items = Cart::instance($this->cart_instance)->content(); return view('livewire.product-cart', [ 'cart_items' => $cart_items ]); } public function productSelected($product) { $cart = Cart::instance($this->cart_instance); $exists = $cart->search(function ($cartItem, $rowId) use ($product) { return $cartItem->id == $product['id']; }); if ($exists->isNotEmpty()) { session()->flash('message', 'Product exists in the cart!'); return; } $cart->add([ 'id' => $product['id'], 'name' => $product['product_name'], 'qty' => 1, 'price' => $this->calculate($product)['price'], 'weight' => 1, 'options' => [ 'product_discount' => 0.00, 'sub_total' => $this->calculate($product)['sub_total'], 'code' => $product['product_code'], 'stock' => $product['product_quantity'], 'product_tax' => $this->calculate($product)['product_tax'], 'unit_price' => $this->calculate($product)['unit_price'] ] ]); $this->check_quantity[$product['id']] = $product['product_quantity']; $this->quantity[$product['id']] = 1; $this->discount_type[$product['id']] = 'fixed'; $this->item_discount[$product['id']] = 0; } public function removeItem($row_id) { Cart::instance($this->cart_instance)->remove($row_id); } public function updatedGlobalTax() { Cart::instance($this->cart_instance)->setGlobalTax((integer)$this->global_tax); } public function updatedGlobalDiscount() { Cart::instance($this->cart_instance)->setGlobalDiscount((integer)$this->global_discount); } public function updateQuantity($row_id, $product_id) { if ($this->check_quantity[$product_id] < $this->quantity[$product_id]) { session()->flash('message', 'The requested quantity is not available in stock.'); return; } Cart::instance($this->cart_instance)->update($row_id, $this->quantity[$product_id]); $cart_item = Cart::instance($this->cart_instance)->get($row_id); Cart::instance($this->cart_instance)->update($row_id, [ 'options' => [ 'sub_total' => $cart_item->price * $cart_item->qty, 'code' => $cart_item->options->code, 'stock' => $cart_item->options->stock, 'product_tax' => $cart_item->options->product_tax, 'unit_price' => $cart_item->options->unit_price, 'product_discount' => $cart_item->options->product_discount, ] ]); } public function setProductDiscount($row_id, $product_id) { $cart_item = Cart::instance($this->cart_instance)->get($row_id); if ($this->discount_type[$product_id] == 'fixed') { Cart::instance($this->cart_instance)->update($row_id, ['price' => ($cart_item->price + $cart_item->options->product_discount) - $this->item_discount[$product_id]]); Cart::instance($this->cart_instance)->update($row_id, ['options' => [ 'sub_total' => $cart_item->price * $cart_item->qty, 'code' => $cart_item->options->code, 'stock' => $cart_item->options->stock, 'product_tax' => $cart_item->options->product_tax, 'unit_price' => $cart_item->options->unit_price, 'product_discount' => $this->item_discount[$product_id], ]]); } } public function calculate($product) { $price = 0; $unit_price = 0; $product_tax = 0; $sub_total = 0; if ($product['product_tax_type'] == 1) { $price = $product['product_price'] + ($product['product_price'] * ($product['product_order_tax'] / 100)); $unit_price = $product['product_price']; $product_tax = $product['product_price'] * ($product['product_order_tax'] / 100); $sub_total = $product['product_price'] + ($product['product_price'] * ($product['product_order_tax'] / 100)); } elseif ($product['product_tax_type'] == 2) { $price = $product['product_price']; $unit_price = $product['product_price'] - ($product['product_price'] * ($product['product_order_tax'] / 100)); $product_tax = $product['product_price'] * ($product['product_order_tax'] / 100); $sub_total = $product['product_price']; } else { $price = $product['product_price']; $unit_price = $product['product_price']; $product_tax = 0.00; $sub_total = $product['product_price']; } return ['price' => $price, 'unit_price' => $unit_price, 'product_tax' => $product_tax, 'sub_total' => $sub_total]; } }