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/WholesaleProductController.php
<?php



namespace App\Http\Controllers;



use Illuminate\Http\Request;

use CoreComponentRepository;

use App\Models\Category;

use App\Models\Product;

use App\Models\ProductTranslation;

use App\Services\WholesaleService;

use App\Services\ProductTaxService;

use App\Services\ProductFlashDealService;

use Auth;

use App\Http\Requests\WholesaleProductRequest;

use Artisan;



class WholesaleProductController extends Controller

{

    public function __construct() {

        // Staff Permission Check

        $this->middleware(['permission:view_all_wholesale_products'])->only('all_wholesale_products');

        $this->middleware(['permission:view_inhouse_wholesale_products'])->only('in_house_wholesale_products');

        $this->middleware(['permission:view_sellers_wholesale_products'])->only('seller_wholesale_products');

        $this->middleware(['permission:add_wholesale_product'])->only('product_create_admin');

        $this->middleware(['permission:edit_wholesale_product'])->only('product_edit_admin');

        $this->middleware(['permission:delete_wholesale_product'])->only('product_destroy_admin');

    }



    public function all_wholesale_products(Request $request)

    {

        CoreComponentRepository::instantiateShopRepository();



        $type = 'All';

        $col_name = null;

        $query = null;

        $sort_search = null;

        $seller_id  = null;



        $products = Product::where('wholesale_product', 1)->orderBy('created_at', 'desc');



        if ($request->has('user_id') && $request->user_id != null) {

            $products = $products->where('user_id', $request->user_id);

            $seller_id = $request->user_id;

        }



        if ($request->type != null){

            $var = explode(",", $request->type);

            $col_name = $var[0];

            $query = $var[1];

            $products = $products->orderBy($col_name, $query);

            $sort_type = $request->type;

        }

        if ($request->search != null){

            $products = $products

                        ->where('name', 'like', '%'.$request->search.'%');

            $sort_search = $request->search;

        }



        $products = $products->paginate(15);



        return view('wholesale.products.index', compact('products','type', 'col_name', 'query', 'sort_search','seller_id'));

    }



    public function in_house_wholesale_products(Request $request)

    {

        CoreComponentRepository::instantiateShopRepository();



        $type = 'In House';

        $col_name = null;

        $query = null;

        $sort_search = null;



        $products = Product::where('wholesale_product', 1)->where('added_by','admin')->orderBy('created_at', 'desc');



        if ($request->type != null){

            $var = explode(",", $request->type);

            $col_name = $var[0];

            $query = $var[1];

            $products = $products->orderBy($col_name, $query);

            $sort_type = $request->type;

        }

        if ($request->search != null){

            $products = $products

                        ->where('name', 'like', '%'.$request->search.'%');

            $sort_search = $request->search;

        }



        $products = $products->paginate(15);



        return view('wholesale.products.index', compact('products','type', 'col_name', 'query', 'sort_search'));

    }



    public function seller_wholesale_products(Request $request)

    {

        CoreComponentRepository::instantiateShopRepository();



        $type = 'Seller';

        $col_name = null;

        $query = null;

        $sort_search = null;

        $seller_id  = null;



        $products = Product::where('wholesale_product', 1)->where('added_by','seller')->orderBy('created_at', 'desc');



        if ($request->has('user_id') && $request->user_id != null) {

            $products = $products->where('user_id', $request->user_id);

            $seller_id = $request->user_id;

        }

        

        if ($request->type != null){

            $var = explode(",", $request->type);

            $col_name = $var[0];

            $query = $var[1];

            $products = $products->orderBy($col_name, $query);

            $sort_type = $request->type;

        }

        if ($request->search != null){

            $products = $products

                        ->where('name', 'like', '%'.$request->search.'%');

            $sort_search = $request->search;

        }



        $products = $products->paginate(15);



        return view('wholesale.products.index', compact('products','type', 'col_name', 'query', 'sort_search','seller_id'));

    }



    // Wholesale Products list in Seller panel 

    public function wholesale_products_list_seller(Request $request)

    {

        $sort_search = null;

        $col_name = null;

        $query = null;

        $products = Product::where('wholesale_product',1)->where('user_id',Auth::user()->id)->orderBy('created_at', 'desc');

        if ($request->type != null){

            $var = explode(",", $request->type);

            $col_name = $var[0];

            $query = $var[1];

            $products = $products->orderBy($col_name, $query);

            $sort_type = $request->type;

        }

        if ($request->search != null){

            $products = $products

                        ->where('name', 'like', '%'.$request->search.'%');

            $sort_search = $request->search;

        }



        $products = $products->paginate(15);



        return view('wholesale.frontend.seller_products.index', compact('products', 'sort_search','col_name'));

    }



    public function product_create_admin()

    {

        CoreComponentRepository::initializeCache();



        $categories = Category::where('parent_id', 0)

            ->where('digital', 0)

            ->with('childrenCategories')

            ->get();

        return view('wholesale.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_wholesale_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('wholesale.frontend.seller_products.create', compact('categories'));

                }

                else {

                    flash(translate('Upload limit has been reached. Please upgrade your package.'))->warning();

                    return back();

                }

            }

            else{

                return view('wholesale.frontend.seller_products.create', compact('categories'));

            }

        }     

    }



    /**

     * Store a newly created resource in storage.

     *

     * @param  \Illuminate\Http\Request  $request

     * @return \Illuminate\Http\Response

     */

    public function product_store_admin(WholesaleProductRequest $request)

    { 

        $product = (new WholesaleService)->store($request->except([

            '_token', 'button', 'flat_shipping_cost', 'tax_id', 'tax', 'tax_type', 'flash_deal_id', 'flash_discount', 'flash_discount_type'

        ]));

        $request->merge(['product_id' => $product->id]);



        //VAT & Tax

        if ($request->tax_id) {

            (new productTaxService)->store($request->only([

                'tax_id', 'tax', 'tax_type', 'product_id'

            ]));

        }



        //Flash Deal

        (new productFlashDealService)->store($request->only([

            'flash_deal_id', 'flash_discount', 'flash_discount_type'

        ]), $product);



        // Product Translations

        $request->merge(['lang' => env('DEFAULT_LANGUAGE')]);

        ProductTranslation::create($request->only([

            'lang', 'name', 'unit', 'description', 'product_id'

        ]));



        flash(translate('Product has been inserted successfully'))->success();



        Artisan::call('view:clear');

        Artisan::call('cache:clear');



        return redirect()->route('wholesale_products.in_house');

    }



    public function product_store_seller(WholesaleProductRequest $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();

            }

        }

       

        $product = (new WholesaleService)->store($request->except([

            '_token', 'tax_id', 'tax', 'tax_type', 'flash_deal_id', 'flash_discount', 'flash_discount_type'

        ]));

        $request->merge(['product_id' => $product->id]);

        //VAT & Tax

        if ($request->tax_id) {

            (new productTaxService)->store($request->only([

                'tax_id', 'tax', 'tax_type', 'product_id'

            ]));

        }



        // Product Translations

        $request->merge(['lang' => env('DEFAULT_LANGUAGE')]);

        ProductTranslation::create($request->only([

            'lang', 'name', 'unit', 'description', 'product_id'

        ]));



        flash(translate('Product has been inserted successfully'))->success();



        Artisan::call('view:clear');

        Artisan::call('cache:clear');

        

        return redirect()->route('seller.wholesale_products_list');

    }





    public function product_edit_admin(Request $request, $id)

    {

        CoreComponentRepository::initializeCache();



        $product = Product::findOrFail($id);

        if($product->digital == 1) {

            return redirect('digitalproducts/' . $id . '/edit');

        }



        $lang = $request->lang;

        $tags = json_decode($product->tags);

        $categories = Category::where('parent_id', 0)

            ->where('digital', 0)

            ->with('childrenCategories')

            ->get();



        return view('wholesale.products.edit', compact('product', 'categories', 'tags','lang'));

    }



    public function product_edit_seller(Request $request, $id)

    {

        $product = Product::findOrFail($id);

        if($product->digital == 1) {

            return redirect('digitalproducts/' . $id . '/edit');

        }



        $lang = $request->lang;

        $tags = json_decode($product->tags);

        $categories = Category::where('parent_id', 0)

            ->where('digital', 0)

            ->with('childrenCategories')

            ->get();

            

        return view('wholesale.frontend.seller_products.edit', compact('product', 'categories', 'tags','lang'));

    }



   

    public function product_update_admin(WholesaleProductRequest $request, $id)

    {

        (new WholesaleService)->update($request, $id);

        flash(translate('Product has been updated successfully'))->success();



        Artisan::call('view:clear');

        Artisan::call('cache:clear');

        return back();

    }



    public function product_update_seller(WholesaleProductRequest $request, $id)

    {

        (new WholesaleService)->update($request, $id);

        flash(translate('Product has been updated successfully'))->success();



        Artisan::call('view:clear');

        Artisan::call('cache:clear');

        return back();

    }



    /**

     * Remove the specified resource from storage.

     *

     * @param  int  $id

     * @return \Illuminate\Http\Response

     */

    public function product_destroy_admin($id)

    {

        (new WholesaleService)->destroy($id);

        flash(translate('Product has been deleted successfully'))->success();

            

        Artisan::call('view:clear');

        Artisan::call('cache:clear');

        return back();

    }



    public function product_destroy_seller($id)

    {

        (new WholesaleService)->destroy($id);

        flash(translate('Product has been deleted successfully'))->success();

            

        Artisan::call('view:clear');

        Artisan::call('cache:clear');

        return back();

    }

}