File: /var/www/vhost/disk-apps/qas.sports-crowd.com/app/Http/Controllers/Api/HomeApiController.php
<?php
namespace App\Http\Controllers\Api;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use DB;
use App\Banner;
use App\Category;
use App\Subcategories;
use App\SubcategoryProduct;
use App\OrderProduct;
use App\UserInformation;
use App\Parameter;
use App\Brand;
use App\Discount;
use App\ProductAttribute;
use App\ProductImage;
use App\Product;
use App\BusinessCategory;
use App\Http\Controllers\ProductTagController;
class HomeApiController extends Controller
{
public function listBanners()
{
$banners = Banner::where('active', 1)
->where(function ($query) {
$query->whereNull('target')
->orWhere('target', 'LIKE', '%home%')
->orWhere('target', 'LIKE', '%app-store%');
})->orderBy('order', 'asc')->get();
$data = array('status' => 'success', 'banners' => $banners);
return response()->json($data, 200);
}
public function listCategories($storeType = 'main')
{
$parameter = Parameter::select('sucursal_products')->first();
if ($parameter->sucursal_products) {
$user_id = Auth::user()->id;
$sucursal = UserInformation::where('user_id', $user_id)->select('current_sucursal_id')->first();
$categories = Category::where([['active', 1], ['sucursal_id', $sucursal->current_sucursal_id], ['store_type', $storeType]])->orderBy('order', 'asc')->get();
} else {
$categories = Category::where([['active', 1], ['store_type', $storeType]])->orderBy('order', 'asc')->get();
}
$data = array('status' => 'success', 'categories' => $categories);
return response()->json($data, 200);
}
public function listCategoriesBusiness()
{
$categoriesBusiness = BusinessCategory::where('active', 1)->orderBy('name', 'asc')->get();
$data = array('status' => 'success', 'business' => $categoriesBusiness);
return response()->json($data, 200);
}
public function listSubcategories(Request $request)
{
$subcategories = Subcategories::where([['active', '=', 1], ['category_id', '=', $request["category_id"]]])
->orderBy('order', 'asc')
->get();
$discountCategory = Discount::where([['active', 1], ['discount_type_id', 10], ['category_id', $request["category_id"]]])
->first();
$data = array('status' => 'success', 'subcategories' => $subcategories, 'discountCategory' => $discountCategory);
return response()->json($data, 200);
}
public function listProductsSubcategories(Request $request, $storeType = 'main')
{
$parameter = Parameter::select('sucursal_products')->first();
$listProducts = DB::table('subcategory_products')
->where('subcategory_id', $request["subcategory_id"])
->leftjoin('products', 'subcategory_products.product_id', '=', 'products.id')
->where([['products.active', true], ['products.store_type', $storeType]])
->whereNull('products.deleted_at')
->offset($request["offset"])
->take($request["take"])
->orderBy('products.' . $request["valueOrder"], $request["orderSorting"]);
if ($parameter->sucursal_products) {
$user_id = Auth::user()->id;
$sucursal = UserInformation::where('user_id', $user_id)->select('current_sucursal_id')->first();
$listProducts = $listProducts->where('products.sucursal_id', $sucursal->current_sucursal_id)->get();
} else {
$listProducts = $listProducts->get();
}
if ($listProducts) {
$controller = new ProductTagController();
foreach ($listProducts as $product) {
if ($product->brand_id) {
$brand = Brand::where('id', $product->brand_id)->first();
} else {
$brand = null;
}
$product->brand = $brand;
$productAttributes = ProductAttribute::where('product_id', $product->id)->with('attribute')->get();
$product->product_attributes = $productAttributes->groupBy('attribute_id')->toArray();
$product->productAttributes = $productAttributes;
$product->special_price = $controller->getSpecialPriceTag($product->id);
$product->special_tag = $controller->getSpecialTagName($product->id);
$product->product_images = ProductImage::where('product_id', $product->id)->get();
}
}
$data = array('status' => 'success', 'listProducts' => $listProducts);
return response()->json($data, 200);
}
public function listProductsTrends(Request $request, $storeType)
{
$parameter = Parameter::select('sucursal_products')->first();
if ($parameter->sucursal_products) {
$user_id = Auth::user()->id;
$sucursal = UserInformation::where('user_id', $user_id)->select('current_sucursal_id')->first();
} else {
$sucursal = null;
}
$listProducts = OrderProduct::select(DB::raw('SUM(quantity) as totalQuantity, product_id'))
->with('products', 'products.brand')
->whereHas('products', function ($query) use ($parameter, $sucursal, $storeType) {
if ($parameter->sucursal_products) {
$query->where([['active', '=', 1], ['sucursal_id', $sucursal->current_sucursal_id]])->where('store_type', $storeType)->whereNull('deleted_at');
} else {
$query->where('active', '=', 1)->where('store_type', $storeType)->whereNull('deleted_at');
}
})
->groupBy('product_id')
->orderBy('totalQuantity', 'desc')
->offset($request["offset"])
->take($request["take"])
->get();
if ($listProducts) {
foreach ($listProducts as $product) {
$product->products->category = Subcategories::where('id', $product->products->subcategoryProduct[0]->subcategory_id)->first();
$productAttributes = ProductAttribute::where('product_id', $product->product_id)->with('attribute')->get();
$product->products->product_attributes = $productAttributes->groupBy('attribute_id')->toArray();
$product->products->productAttributes = $productAttributes;
$product->products->product_images = ProductImage::where('product_id', $product->product_id)->get();
}
$data = array('status' => 'success', 'listProducts' => $listProducts);
return response()->json($data, 200);
} else {
$data = array('status' => 'error', 'listProducts' => null);
return response()->json($data, 200);
}
}
public function productsSubcategoryFilter(Request $request, $storeType)
{
$listProducts = SubcategoryProduct::where('subcategory_id', $request["subCategory_id"])
->with('products', 'products.brand')
->whereHas('products', function ($query) use ($request, $storeType) {
$query->where('active', '=', 1)->where('name', 'like', '%' . $request["valueSearch"] . '%')->where('store_type', $storeType)->whereNull('deleted_at');
})
->offset($request["offset"])
->take($request["take"])
->get();
if ($listProducts) {
$controller = new ProductTagController();
foreach ($listProducts as $product) {
$productAttributes = ProductAttribute::where('product_id', $product->id)->with('attribute')->get();
$product->product_attributes = $productAttributes->groupBy('attribute_id')->toArray();
$product->productAttributes = $productAttributes;
$product->special_price = $controller->getSpecialPriceTag($product->id);
$product->special_tag = $controller->getSpecialTagName($product->id);
$product->product_images = ProductImage::where('product_id', $product->id)->get();
}
}
$data = array('status' => 'success', 'listProducts' => $listProducts);
return response()->json($data, 200);
}
public function getProductsPlu($plu)
{
$controller = new ProductTagController();
$product = Product::where('plu', $plu)
->where('active', 1)
->whereNull('deleted_at')
->with('brand', 'productImages')
->has('subcategoryProduct')
->first();
$productAttributes = ProductAttribute::where('product_id', $product->id)->with('attribute')->get();
$product->product_attributes = $productAttributes->groupBy('attribute_id')->toArray();
$product->productAttributes = $productAttributes;
$product->special_price = $controller->getSpecialPriceTag($product->id);
$product->special_tag = $controller->getSpecialTagName($product->id);
$data = array('status' => 'success', 'product' => $product);
return response()->json($data, 200);
}
}