ok
Direktori : /home2/selectio/www/limpiar.in.net/updates/app/Http/Controllers/Api/V2/ |
Current File : //home2/selectio/www/limpiar.in.net/updates/app/Http/Controllers/Api/V2/ProductController.php |
<?php namespace App\Http\Controllers\Api\V2; use App\Http\Resources\V2\ClassifiedProductDetailCollection; use App\Http\Resources\V2\ClassifiedProductMiniCollection; use Cache; use App\Models\Shop; use App\Models\Color; use App\Models\Product; use App\Models\FlashDeal; use Illuminate\Http\Request; use App\Utility\SearchUtility; use App\Utility\CategoryUtility; use App\Http\Resources\V2\ProductCollection; use App\Http\Resources\V2\FlashDealCollection; use App\Http\Resources\V2\ProductMiniCollection; use App\Http\Resources\V2\ProductDetailCollection; use App\Http\Resources\V2\DigitalProductDetailCollection; use App\Models\CustomerProduct; class ProductController extends Controller { public function index() { return new ProductMiniCollection(Product::latest()->paginate(10)); } public function show($id) { return new ProductDetailCollection(Product::where('id', $id)->get()); // if (Product::findOrFail($id)->digital==0) { // return new ProductDetailCollection(Product::where('id', $id)->get()); // }elseif (Product::findOrFail($id)->digital==1) { // return new DigitalProductDetailCollection(Product::where('id', $id)->get()); // } } // public function admin() // { // return new ProductCollection(Product::where('added_by', 'admin')->latest()->paginate(10)); // } public function getPrice(Request $request) { $product = Product::findOrFail($request->id); $str = ''; $tax = 0; $quantity = 1; if ($request->has('quantity') && $request->quantity !=null) { $quantity = $request->quantity; } if ($request->has('color') && $request->color != null) { $str = Color::where('code', '#' . $request->color)->first()->name; } $var_str = str_replace(',', '-', $request->variants); $var_str = str_replace(' ', '', $var_str); if ($var_str != "") { $temp_str = $str == "" ? $var_str : '-' . $var_str; $str .= $temp_str; } $product_stock = $product->stocks->where('variant', $str)->first(); $price = $product_stock->price; if ($product->wholesale_product) { $wholesalePrice = $product_stock->wholesalePrices->where('min_qty', '<=', $quantity)->where('max_qty', '>=', $quantity)->first(); if ($wholesalePrice) { $price = $wholesalePrice->price; } } $stock_qty = $product_stock->qty; $stock_txt = $product_stock->qty; $max_limit = $product_stock->qty; if ($stock_qty >= 1 && $product->min_qty <= $stock_qty) { $in_stock = 1; } else { $in_stock = 0; } //Product Stock Visibility if ($product->stock_visibility_state == 'text') { if ($stock_qty >= 1 && $product->min_qty < $stock_qty) { $stock_txt = translate('In Stock'); } else { $stock_txt = translate('Out Of Stock'); } } //discount calculation $discount_applicable = false; if ($product->discount_start_date == null) { $discount_applicable = true; } elseif ( strtotime(date('d-m-Y H:i:s')) >= $product->discount_start_date && strtotime(date('d-m-Y H:i:s')) <= $product->discount_end_date ) { $discount_applicable = true; } if ($discount_applicable) { if ($product->discount_type == 'percent') { $price -= ($price * $product->discount) / 100; } elseif ($product->discount_type == 'amount') { $price -= $product->discount; } } // taxes foreach ($product->taxes as $product_tax) { if ($product_tax->tax_type == 'percent') { $tax += ($price * $product_tax->tax) / 100; } elseif ($product_tax->tax_type == 'amount') { $tax += $product_tax->tax; } } $price += $tax; return response()->json( [ 'result' => true, 'data' => [ 'price' => single_price($price * $quantity), 'stock' => $stock_qty, 'stock_txt' => $stock_txt, 'digital' => $product->digital, 'variant' => $str, 'variation' => $str, 'max_limit' => $max_limit, 'in_stock' => $in_stock, 'image' => $product_stock->image == null ? "" : uploaded_asset($product_stock->image) ] ] ); } public function seller($id, Request $request) { $shop = Shop::findOrFail($id); $products = Product::where('added_by', 'seller')->where('user_id', $shop->user_id); if ($request->name != "" || $request->name != null) { $products = $products->where('name', 'like', '%' . $request->name . '%'); } $products->where('published', 1); return new ProductMiniCollection($products->latest()->paginate(10)); } public function category($id, Request $request) { $category_ids = CategoryUtility::children_ids($id); $category_ids[] = $id; $products = Product::whereIn('category_id', $category_ids)->physical(); if ($request->name != "" || $request->name != null) { $products = $products->where('name', 'like', '%' . $request->name . '%'); } $products->where('published', 1); return new ProductMiniCollection(filter_products($products)->latest()->paginate(10)); } public function brand($id, Request $request) { $products = Product::where('brand_id', $id)->physical(); if ($request->name != "" || $request->name != null) { $products = $products->where('name', 'like', '%' . $request->name . '%'); } return new ProductMiniCollection(filter_products($products)->latest()->paginate(10)); } public function todaysDeal() { // return Cache::remember('app.todays_deal', 86400, function () { $products = Product::where('todays_deal', 1)->physical(); return new ProductMiniCollection(filter_products($products)->limit(20)->latest()->get()); // }); } public function flashDeal() { return Cache::remember('app.flash_deals', 86400, function () { $flash_deals = FlashDeal::where('status', 1)->where('featured', 1)->where('start_date', '<=', strtotime(date('d-m-Y')))->where('end_date', '>=', strtotime(date('d-m-Y')))->get(); return new FlashDealCollection($flash_deals); }); } public function featured() { $products = Product::where('featured', 1)->physical(); return new ProductMiniCollection(filter_products($products)->latest()->paginate(10)); } public function digital() { $products = Product::digital(); return new ProductMiniCollection(filter_products($products)->latest()->paginate(10)); } public function bestSeller() { // return Cache::remember('app.best_selling_products', 86400, function () { $products = Product::orderBy('num_of_sale', 'desc')->physical(); return new ProductMiniCollection(filter_products($products)->limit(20)->get()); // }); } public function related($id) { // return Cache::remember("app.related_products-$id", 86400, function () use ($id) { $product = Product::find($id); $products = Product::where('category_id', $product->category_id)->where('id', '!=', $id)->physical(); return new ProductMiniCollection(filter_products($products)->limit(10)->get()); // }); } public function topFromSeller($id) { // return Cache::remember("app.top_from_this_seller_products-$id", 86400, function () use ($id) { $product = Product::find($id); $products = Product::where('user_id', $product->user_id)->orderBy('num_of_sale', 'desc')->physical(); return new ProductMiniCollection(filter_products($products)->limit(10)->get()); // }); } public function search(Request $request) { $category_ids = []; $brand_ids = []; if ($request->categories != null && $request->categories != "") { $category_ids = explode(',', $request->categories); } if ($request->brands != null && $request->brands != "") { $brand_ids = explode(',', $request->brands); } $sort_by = $request->sort_key; $name = $request->name; $min = $request->min; $max = $request->max; $products = Product::query(); $products->where('published', 1)->physical(); if (!empty($brand_ids)) { $products->whereIn('brand_id', $brand_ids); } if (!empty($category_ids)) { $n_cid = []; foreach ($category_ids as $cid) { $n_cid = array_merge($n_cid, CategoryUtility::children_ids($cid)); } if (!empty($n_cid)) { $category_ids = array_merge($category_ids, $n_cid); } $products->whereIn('category_id', $category_ids); } if ($name != null && $name != "") { $products->where(function ($query) use ($name) { foreach (explode(' ', trim($name)) as $word) { $query->where('name', 'like', '%' . $word . '%')->orWhere('tags', 'like', '%' . $word . '%')->orWhereHas('product_translations', function ($query) use ($word) { $query->where('name', 'like', '%' . $word . '%'); }); } }); SearchUtility::store($name); } if ($min != null && $min != "" && is_numeric($min)) { $products->where('unit_price', '>=', $min); } if ($max != null && $max != "" && is_numeric($max)) { $products->where('unit_price', '<=', $max); } switch ($sort_by) { case 'price_low_to_high': $products->orderBy('unit_price', 'asc'); break; case 'price_high_to_low': $products->orderBy('unit_price', 'desc'); break; case 'new_arrival': $products->orderBy('created_at', 'desc'); break; case 'popularity': $products->orderBy('num_of_sale', 'desc'); break; case 'top_rated': $products->orderBy('rating', 'desc'); break; default: $products->orderBy('created_at', 'desc'); break; } return new ProductMiniCollection(filter_products($products)->paginate(10)); } public function variantPrice(Request $request) { $product = Product::findOrFail($request->id); $str = ''; $tax = 0; if ($request->has('color') && $request->color != "") { $str = Color::where('code', '#' . $request->color)->first()->name; } $var_str = str_replace(',', '-', $request->variants); $var_str = str_replace(' ', '', $var_str); if ($var_str != "") { $temp_str = $str == "" ? $var_str : '-' . $var_str; $str .= $temp_str; } return $this->calc($product, $str, $request, $tax); /* $product_stock = $product->stocks->where('variant', $str)->first(); $price = $product_stock->price; $stockQuantity = $product_stock->qty; //discount calculation $discount_applicable = false; if ($product->discount_start_date == null) { $discount_applicable = true; } elseif ( strtotime(date('d-m-Y H:i:s')) >= $product->discount_start_date && strtotime(date('d-m-Y H:i:s')) <= $product->discount_end_date ) { $discount_applicable = true; } if ($discount_applicable) { if ($product->discount_type == 'percent') { $price -= ($price * $product->discount) / 100; } elseif ($product->discount_type == 'amount') { $price -= $product->discount; } } foreach ($product->taxes as $product_tax) { if ($product_tax->tax_type == 'percent') { $tax += ($price * $product_tax->tax) / 100; } elseif ($product_tax->tax_type == 'amount') { $tax += $product_tax->tax; } } $price += $tax; return response()->json([ 'product_id' => $product->id, 'variant' => $str, 'price' => (float)convert_price($price), 'price_string' => format_price(convert_price($price)), 'stock' => intval($stockQuantity), 'image' => $product_stock->image == null ? "" : uploaded_asset($product_stock->image) ]);*/ } // public function home() // { // return new ProductCollection(Product::inRandomOrder()->physical()->take(50)->get()); // } }