<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Models\Product;
use App\Models\Category;
use App\Models\Order;
use App\Models\OrderDetail;
use App\Models\User;
use App\Services\AuctionService;
use App\Models\ProductQuery;
use Auth;
use Carbon\Carbon;
use DB;
class AuctionProductController extends Controller
{
public function __construct() {
// Staff Permission Check
$this->middleware(['permission:view_all_auction_products'])->only('all_auction_product_list');
$this->middleware(['permission:view_inhouse_auction_products'])->only('inhouse_auction_products');
$this->middleware(['permission:view_seller_auction_products'])->only('seller_auction_products');
$this->middleware(['permission:add_auction_product'])->only('product_create_admin');
$this->middleware(['permission:edit_auction_product'])->only('product_edit_admin');
$this->middleware(['permission:delete_auction_product'])->only('product_destroy_admin');
$this->middleware(['permission:view_auction_product_orders'])->only('admin_auction_product_orders');
}
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
// Auction products list admin panel
public function all_auction_product_list(Request $request)
{
$sort_search = null;
$seller_id = null;
$type = 'all';
$products = Product::orderBy('created_at', 'desc')->where('auction_product', 1);
if ($request->has('user_id') && $request->user_id != null) {
$products = $products->where('user_id', $request->user_id);
$seller_id = $request->user_id;
}
if ($request->search != null) {
$products = $products->where('name', 'like', '%' . $request->search . '%');
$sort_search = $request->search;
}
$products = $products->paginate(15);
return view('auction.auction_products.index', compact('products', 'sort_search', 'type', 'seller_id'));
}
public function inhouse_auction_products(Request $request)
{
$sort_search = null;
$seller_id = null;
$type = 'in_house';
$products = Product::where('added_by', 'admin')->orderBy('created_at', 'desc')->where('auction_product', 1);
if ($request->search != null) {
$products = $products->where('name', 'like', '%' . $request->search . '%');
$sort_search = $request->search;
}
$products = $products->paginate(15);
return view('auction.auction_products.index', compact('products', 'sort_search', 'type', 'seller_id'));
}
public function seller_auction_products(Request $request)
{
$sort_search = null;
$seller_id = null;
$type = 'seller';
$products = Product::where('added_by', 'seller')->orderBy('created_at', 'desc')->where('auction_product', 1);
if ($request->has('user_id') && $request->user_id != null) {
$products = $products->where('user_id', $request->user_id);
$seller_id = $request->user_id;
}
if ($request->search != null) {
$products = $products
->where('name', 'like', '%' . $request->search . '%');
$sort_search = $request->search;
}
$products = $products->paginate(15);
return view('auction.auction_products.index', compact('products', 'sort_search', 'type', 'seller_id'));
}
// Auction products list admin panel end
// Auction Products list in Seller panel
public function auction_product_list_seller(Request $request)
{
if (get_setting('seller_auction_product') == 0) {
return redirect()->route('home');
}
$sort_search = null;
$products = Product::where('auction_product', 1)->where('user_id', Auth::user()->id)->orderBy('created_at', 'desc');
if ($request->search != null) {
$products = $products
->where('name', 'like', '%' . $request->search . '%');
$sort_search = $request->search;
}
$products = $products->paginate(15);
return view('auction.frontend.seller.auction_product_list', compact('products', 'sort_search'));
}
/**
* Show the form for creating a new resource.
*
* @return \Illuminate\Http\Response
*/
public function product_create_admin()
{
$categories = Category::where('parent_id', 0)
->where('digital', 0)
->with('childrenCategories')
->get();
return view('auction.auction_products.create', compact('categories'));
}
public function product_create_seller()
{
$categories = Category::where('parent_id', 0)
->where('digital', 0)
->with('childrenCategories')
->get();
if (get_setting('seller_auction_product') == 1) {
if (addon_is_activated('seller_subscription')) {
if (Auth::user()->shop->seller_package != null && Auth::user()->shop->seller_package->product_upload_limit > Auth::user()->products()->count()) {
return view('auction.frontend.seller.auction_product_upload', compact('categories'));
} else {
flash(translate('Upload limit has been reached. Please upgrade your package.'))->warning();
return back();
}
} else {
return view('auction.frontend.seller.auction_product_upload', compact('categories'));
}
}
}
public function product_store_admin(Request $request)
{
(new AuctionService)->store($request);
return redirect()->route('auction.inhouse_products');
}
public function product_store_seller(Request $request)
{
if (addon_is_activated('seller_subscription')) {
if (
Auth::user()->shop->seller_package == null ||
Auth::user()->shop->seller_package->product_upload_limit <= Auth::user()->products()->count()
) {
flash(translate('Upload limit has been reached. Please upgrade your package.'))->warning();
return back();
}
}
(new AuctionService)->store($request);
return redirect()->route('auction_products.seller.index');
}
/**
* Store a newly created resource in storage.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function product_destroy_admin($id)
{
(new AuctionService)->destroy($id);
return redirect()->route('auction.inhouse_products');
}
public function product_destroy_seller($id)
{
(new AuctionService)->destroy($id);
return redirect()->route('auction_products.seller.index');
}
/**
* Show the form for editing the specified resource.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function product_edit_admin(Request $request, $id)
{
$product = Product::findOrFail($id);
$lang = $request->lang;
$tags = json_decode($product->tags);
$categories = Category::where('parent_id', 0)
->where('digital', 0)
->with('childrenCategories')
->get();
return view('auction.auction_products.edit', compact('product', 'categories', 'tags', 'lang'));
}
public function product_edit_seller(Request $request, $id)
{
$product = Product::findOrFail($id);
$lang = $request->lang;
$tags = json_decode($product->tags);
$categories = Category::where('parent_id', 0)
->where('digital', 0)
->with('childrenCategories')
->get();
return view('auction.frontend.seller.auction_product_edit', compact('product', 'categories', 'tags', 'lang'));
}
/**
* Update the specified resource in storage.
*
* @param \Illuminate\Http\Request $request
* @param int $id
* @return \Illuminate\Http\Response
*/
public function product_update_admin(Request $request, $id)
{
(new AuctionService)->update($request, $id);
return back();
}
public function product_update_seller(Request $request, $id)
{
(new AuctionService)->update($request, $id);
return back();
}
/**
* Remove the specified resource from storage.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function destroy($id)
{
(new AuctionService)->destroy($id);
return back();
}
public function get_products_by_brand(Request $request)
{
$products = Product::where('brand_id', $request->brand_id)->get();
return view('partials.product_select', compact('products'));
}
public function updatePublished(Request $request)
{
$product = Product::findOrFail($request->id);
$product->published = $request->status;
if ($product->added_by == 'seller' && addon_is_activated('seller_subscription')) {
$seller = $product->user->shop;
if ($seller->package_invalid_at != null && Carbon::now()->diffInDays(Carbon::parse($seller->package_invalid_at), false) <= 0) {
return 0;
}
}
$product->save();
return 1;
}
public function all_auction_products()
{
$products = Product::latest()->where('published', 1)->where('auction_product', 1);
if (get_setting('seller_auction_product') == 0) {
$products = $products->where('added_by', 'admin');
}
$products = $products->where('auction_start_date', '<=', strtotime("now"))->where('auction_end_date', '>=', strtotime("now"))->paginate(15);
return view('auction.frontend.all_auction_products', compact('products'));
}
public function auction_product_details(Request $request, $slug)
{
$detailedProduct = Product::where('slug', $slug)->first();
$product_queries = ProductQuery::where('product_id', $detailedProduct->id)->where('customer_id', '!=', Auth::id())->latest('id')->paginate(3);
$total_query = ProductQuery::where('product_id', $detailedProduct->id)->count();
$reviews = $detailedProduct->reviews()->paginate(3);
// review status
$review_status = 0;
if (Auth::check()) {
$OrderDetail = OrderDetail::with(['order' => function ($q) {
$q->where('user_id', Auth::id());
}])->where('product_id', $detailedProduct->id)->where('delivery_status', 'delivered')->first();
$review_status = $OrderDetail ? 1 : 0;
}
if ($detailedProduct != null) {
return view('frontend.product_details', compact('detailedProduct', 'product_queries', 'total_query', 'reviews', 'review_status'));
}
abort(404);
}
public function purchase_history_user()
{
$orders = DB::table('orders')
->orderBy('code', 'desc')
->join('order_details', 'orders.id', '=', 'order_details.order_id')
->join('products', 'order_details.product_id', '=', 'products.id')
->where('orders.user_id', Auth::user()->id)
->where('products.auction_product', '1')
->select('order_details.order_id as id')
->paginate(15);
return view('auction.frontend.purchase_history', compact('orders'));
}
public function admin_auction_product_orders(Request $request)
{
$payment_status = null;
$delivery_status = null;
$sort_search = null;
$date = $request->date;
$orders = DB::table('orders')
->orderBy('code', 'desc')
->join('order_details', 'orders.id', '=', 'order_details.order_id')
->join('products', 'order_details.product_id', '=', 'products.id')
->where('products.auction_product', '1')
->select('orders.id');
if ($request->payment_status != null) {
$orders = $orders->where('payment_status', $request->payment_status);
$payment_status = $request->payment_status;
}
if ($request->delivery_status != null) {
$orders = $orders->where('delivery_status', $request->delivery_status);
$delivery_status = $request->delivery_status;
}
if ($request->has('search')) {
$sort_search = $request->search;
$orders = $orders->where('code', 'like', '%' . $sort_search . '%');
}
if ($date != null) {
$orders = $orders->whereDate('orders.created_at', '>=', date('Y-m-d', strtotime(explode(" to ", $date)[0])))->whereDate('orders.created_at', '<=', date('Y-m-d', strtotime(explode(" to ", $date)[1])));
}
$orders = $orders->paginate(15);
return view('auction.auction_product_orders', compact('orders', 'payment_status', 'delivery_status', 'sort_search', 'date'));
}
public function auction_orders_show($id)
{
$order = Order::findOrFail(decrypt($id));
$order_shipping_address = json_decode($order->shipping_address);
$delivery_boys = User::where('city', $order_shipping_address->city)
->where('user_type', 'delivery_boy')
->get();
$order->viewed = 1;
$order->save();
return view('auction.auction_product_order_details', compact('order', 'delivery_boys'));
}
public function seller_auction_product_orders(Request $request)
{
if (get_setting('seller_auction_product') == 0) {
return redirect()->route('home');
}
$payment_status = null;
$delivery_status = null;
$sort_search = null;
$orders = DB::table('orders')
->orderBy('code', 'desc')
->where('orders.seller_id', Auth::user()->id)
->join('order_details', 'orders.id', '=', 'order_details.order_id')
->join('products', 'order_details.product_id', '=', 'products.id')
->where('products.auction_product', '1')
->select('orders.id');
if ($request->payment_status != null) {
$orders = $orders->where('payment_status', $request->payment_status);
$payment_status = $request->payment_status;
}
if ($request->delivery_status != null) {
$orders = $orders->where('delivery_status', $request->delivery_status);
$delivery_status = $request->delivery_status;
}
if ($request->has('search')) {
$sort_search = $request->search;
$orders = $orders->where('code', 'like', '%' . $sort_search . '%');
}
$orders = $orders->paginate(15);
return view('auction.frontend.seller.auction_product_orders', compact('orders', 'payment_status', 'delivery_status', 'sort_search'));
}
}
|