dbfdg hasOne('App\Models\Customer', 'id', 'customer_id'); } public function warehouse() { return $this->hasOne('App\Models\warehouse', 'id', 'warehouse_id'); } public function items() { return $this->hasMany('App\Models\QuotationProduct', 'quotation_id', 'id'); } public static function quotationProduct($value , $session_key = 'pos') { $id = $value->product_id; $product = ProductService::find($id); $productquantity = 0; if ($product) { $productquantity = $product->getTotalProductQuantity(); } if (!$product || ($session_key == 'pos' && $productquantity == 0)) { return response()->json( [ 'code' => 404, 'status' => 'Error', 'error' => __('This product is out of stock!'), ], 404 ); } $productname = $product->name; $productprice = $product->sale_price != 0 ? $product->sale_price : 0; $originalquantity = (int) $productquantity; $quantity = $value->quantity; $taxes = Utility::tax($product->tax_id); $totalTaxRate = Utility::totalTaxRate($product->tax_id); $quotationProduct = QuotationProduct::where('product_id',$id)->get(); $discount = 0; foreach($quotationProduct as $value) { $discount += $value->discount; } $product_tax = ''; $product_tax_id = []; foreach ($taxes as $tax) { $product_tax .= !empty($tax) ? "" . $tax->name . ' (' . $tax->rate . '%)' . "
" : ''; $product_tax_id[] = !empty($tax) ? $tax->id : 0; } if (empty($product_tax)) { $product_tax = "-"; } $producttax = $totalTaxRate; $tax = ($productprice * $producttax * $quantity) / 100; $subtotal = $productprice * $quantity + $tax ; $netPrice = $subtotal - $discount; $cart = session()->get($session_key); $image_url = (!empty($product->pro_image) && Storage::exists($product->pro_image)) ? $product->pro_image : 'uploads/pro_image/' . $product->pro_image; $model_delete_id = 'delete-form-' . $id; // if cart is empty then this the first product if (!$cart) { $cart = [ $id => [ "name" => $productname, "quantity" => $quantity, "price" => $productprice, "id" => $id, "tax" => $producttax, "subtotal" => $subtotal, "discount" => $discount, "netPrice"=>$netPrice, "originalquantity" => $originalquantity, "product_tax" => $product_tax, "product_tax_id" => !empty($product_tax_id) ? implode(',', $product_tax_id) : 0, ], ]; if ($originalquantity < $cart[$id]['quantity'] && $session_key == 'pos') { return redirect()->back()->with('error',__('This product is out of stock!')); return response()->json( [ 'code' => 404, 'status' => 'Error', 'error' => __('This product is out of stock!'), ], 404 ); } session()->put($session_key, $cart); return response()->json( [ 'code' => 200, 'status' => 'Success', 'success' => $productname . __(' added to cart successfully!'), 'product' => $cart[$id], ] ); } // if cart not empty then check if this product exist then increment quantity if (isset($cart[$id])) { $cart[$id]['quantity']++; $cart[$id]['id'] = $id; $subtotal = $cart[$id]["price"] * $cart[$id]["quantity"]; $tax = ($subtotal * $cart[$id]["tax"]) / 100; $discount = $cart[$id]["discount"]; $cart[$id]["subtotal"] = $subtotal + $tax; $cart[$id]["originalquantity"] = $originalquantity; $cart[$id]["netPrice"] = $subtotal - $discount; if ($originalquantity < $cart[$id]['quantity'] && $session_key == 'pos') { return response()->json( [ 'code' => 404, 'status' => 'Error', 'error' => __('This product is out of stock!'), ], 404 ); } session()->put($session_key, $cart); return response()->json( [ 'code' => 200, 'status' => 'Success', 'success' => $productname . __(' added to cart successfully!'), 'product' => $cart[$id], 'carttotal' => $cart, ] ); } // if item not exist in cart then add to cart with quantity = 1 $cart[$id] = [ "name" => $productname, "quantity" => 1, "price" => $productprice, "tax" => $producttax, "subtotal" => $subtotal, "discount" => $discount, "netPrice"=> $netPrice, "id" => $id, "originalquantity" => $originalquantity, "product_tax" => $product_tax, ]; if ($originalquantity < $cart[$id]['quantity'] && $session_key == 'pos') { return response()->json( [ 'code' => 404, 'status' => 'Error', 'error' => __('This product is out of stock!'), ], 404 ); } session()->put($session_key, $cart); return response()->json( [ 'code' => 200, 'status' => 'Success', 'success' => $productname . __(' added to cart successfully!'), 'product' => $cart[$id], 'carttotal' => $cart, ] ); } }