File: /var/www/vhost/disk-apps/agile-selling-wpb/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;
class HomeApiController extends Controller
{
public function listBanners(){
$banners = Banner::where('active', 1)->orderBy('order', 'asc')->get();
$data = array('status' => 'success', 'banners' => $banners);
return response()->json($data, 200);
}
public function listCategories(){
$parameter = Parameter::where('id',1)->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]])->orderBy('order', 'asc')->get();
}else{
$categories = Category::where('active', 1)->orderBy('order', 'asc')->get();
}
$data = array('status' => 'success', 'categories' => $categories);
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){
$parameter = Parameter::where('id',1)->select('sucursal_products')->first();
$listProducts = DB::table('subcategory_products')
->where('subcategory_id', $request["subcategory_id"])
->join('products', 'subcategory_products.product_id', '=', 'products.id', 'left')
->where('products.active', true)
->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) {
foreach ($listProducts as $product) {
if ($product->brand_id) {
$brand = Brand::where('id',$product->brand_id)->first();
}else{
$brand = null;
}
$product->brand = $brand;
$product->product_attributes = ProductAttribute::where('product_id', $product->id)->with('attribute')->get()->groupBy('attribute_id')->toArray();
$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){
$parameter = Parameter::where('id',1)->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')
->whereHas('products', function ($query) use($parameter,$sucursal) {
if ($parameter->sucursal_products) {
$query->where([['active', '=', 1],['sucursal_id',$sucursal->current_sucursal_id]]);
}else{
$query->where('active', '=', 1);
}
})
->with('products.brand')
->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();
$product->products->product_attributes = ProductAttribute::where('product_id', $product->product_id)->with('attribute')->get()->groupBy('attribute_id')->toArray();
$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)
{
$listProducts = SubcategoryProduct::where('subcategory_id', $request["subCategory_id"])
->with('products')
->whereHas('products', function ($query) use($request){
$query->where('active', '=', 1)->where('name', 'like', '%' . $request["valueSearch"] . '%');
})
->with('products.brand')
->offset($request["offset"])
->take($request["take"])
->get();
if ($listProducts) {
foreach ($listProducts as $product) {
$product->product_attributes = ProductAttribute::where('product_id', $product->id)->with('attribute')->get()->groupBy('attribute_id')->toArray();
$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)
{
$product = Product::where('plu', $plu)
->where('active', 1)
->with('brand','productImages')
->has('subcategoryProduct')
->first();
$product->product_attributes = ProductAttribute::where('product_id', $product->id)->with('attribute')->get()->groupBy('attribute_id')->toArray();
$data = array('status' => 'success', 'product' => $product);
return response()->json($data, 200);
}
}