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,
]
);
}
}