middleware('check.permission:stocks.read')->only(['index']); } public function index() { $businessId = auth()->user()->business_id; $alert_qty_filter = request('alert_qty'); $search_term = request('search'); $per_page = request('per_page', 20); $query = Product::with('stocks', 'category:id,categoryName') ->where('product_type', '!=', 'combo') ->where('business_id', $businessId); if ($search_term) { $query->where(function ($q) use ($search_term) { $q->where('productName', 'like', '%' . $search_term . '%') ->orWhere('productCode', 'like', '%' . $search_term . '%') ->orWhere('hsn_code', 'like', '%' . $search_term . '%') ->orWhereHas('category', function ($q) use ($search_term) { $q->where('categoryName', 'like', '%' . $search_term . '%'); }); }); } if ($alert_qty_filter) { $products = $query ->withSum('stocks as total_stock', 'productStock') ->whereRaw('(SELECT COALESCE(SUM("productStock"),0) FROM stocks WHERE stocks.product_id = products.id) <= products.alert_qty') ->latest() ->paginate($per_page) ->appends(request()->query()); $total_stock_qty = $products->sum('total_stock'); $total_stock_value = $products->sum(function ($product) { return $product->stocks->sum(function ($stock) { return $stock->productStock * $stock->productPurchasePrice; }); }); } else { $products = $query ->withSum('stocks as total_stock', 'productStock') ->latest() ->paginate($per_page) ->appends(request()->query()); $total_stock_qty = $products->sum('total_stock'); $total_stock_value = $products->sum(function ($product) { return $product->stocks->sum(function ($stock) { return $stock->productStock * $stock->productPurchasePrice; }); }); } if (request()->ajax()) { return response()->json([ 'data' => view('business::stocks.datas', compact('products', 'total_stock_value', 'total_stock_qty'))->render(), 'total_stock_qty' => $total_stock_qty, 'total_stock_value' => currency_format($total_stock_value, currency: business_currency()) ]); } return view('business::stocks.index', [ 'products' => $products, 'total_stock_value' => $total_stock_value, 'total_stock_qty' => $total_stock_qty, ]); } public function exportExcel() { return Excel::download(new ExportCurrentStock, 'stock-list.xlsx'); } public function exportCsv() { return Excel::download(new ExportCurrentStock, 'stock-list.csv'); } public function exportPdf() { $businessId = auth()->user()->business_id; $alert_qty_filter = request('alert_qty'); $search_term = request('search'); $per_page = request('per_page', 20); $query = Product::with('stocks', 'category:id,categoryName') ->where('product_type', '!=', 'combo') ->where('business_id', $businessId); if ($search_term) { $query->where(function ($q) use ($search_term) { $q->where('productName', 'like', '%' . $search_term . '%') ->orWhere('productCode', 'like', '%' . $search_term . '%') ->orWhere('hsn_code', 'like', '%' . $search_term . '%') ->orWhereHas('category', function ($q) use ($search_term) { $q->where('categoryName', 'like', '%' . $search_term . '%'); }); }); } if ($alert_qty_filter) { $products = $query ->withSum('stocks as total_stock', 'productStock') ->havingRaw('total_stock <= products.alert_qty') ->latest() ->limit($per_page) ->get(); $total_stock_qty = $products->sum('total_stock'); $total_stock_value = $products->sum(function ($product) { return $product->stocks->sum(function ($stock) { return $stock->productStock * $stock->productPurchasePrice; }); }); } else { $products = $query ->withSum('stocks as total_stock', 'productStock') ->latest() ->limit($per_page) ->get(); $total_stock_qty = $products->sum('total_stock'); $total_stock_value = $products->sum(function ($product) { return $product->stocks->sum(function ($stock) { return $stock->productStock * $stock->productPurchasePrice; }); }); } return PdfService::render('business::stocks.pdf', compact('products', 'total_stock_qty', 'total_stock_value'), 'stock-list.pdf'); } }