GoodController.php 8.55 KB
<?php

namespace App\Http\Controllers\Admin;

use App\Http\Controllers\Controller;
use App\Http\Requests\GoodsRequest;
use App\Models\Good;
use App\Models\Images;
use App\Models\Manufacturer;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Session;
use Illuminate\Support\Facades\Storage;
use Illuminate\Support\Facades\Validator;
use App\Classes\SimpleXLS;
use PhpOffice\PhpSpreadsheet\IOFactory;

class GoodController extends Controller
{
    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function index()
    {
        $goods = Good::query()->orderBy('id')->paginate(5);
        return view('admin.goods.index', compact('goods'));

    }

    /**
     * Show the form for creating a new resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function create()
    {
        return view('admin.goods.create');
    }

    /**
     * Store a newly created resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\Response
     */
    public function store(GoodsRequest $request)
    {
        $params = $request->all();

        if ($request->has('image')) {
            $params['image'] = $request->file('image')->store('goods', 'public');
        }

        Good::create($params);
        return redirect()->route('admin.goods.index');
    }

    /**
     * Display the specified resource.
     *
     * @param  \App\Models\Good  $good
     * @return \Illuminate\Http\Response
     */
    public function show(Good $good)
    {
        //
    }

    /**
     * Show the form for editing the specified resource.
     *
     * @param  \App\Models\Good  $good
     * @return \Illuminate\Http\Response
     */
    public function edit(Good $good)
    {
        return view('admin.goods.edit', compact('good'));
    }

    /**
     * Update the specified resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \App\Models\Good  $good
     * @return \Illuminate\Http\Response
     */
    public function update(Request $request, Good $good)
    {
        $params = $request->all();

        if ($request->has('image')) {
            if (!empty($good->image)) Storage::delete($good->image);
            $params['image'] = $request->file('image')->store('goods', 'public');
        } else {
            if (!empty($good->image)) $params['image'] = $good->image;
        }

        $good->update($params);
        return redirect()->route('admin.goods.index');
    }

    /**
     * Remove the specified resource from storage.
     *
     * @param  \App\Models\Good  $good
     * @return \Illuminate\Http\Response
     */
    public function destroy(Good $good)
    {
        if (!empty($good->image)) {
            Storage::delete($good->image);
        }
        $good->delete();
        return redirect()->route('admin.goods.index');
    }

    public function images_good(Good $good) {
       return view('admin.goods.add_image', compact('good'));
    }

    public function good_add_img(Good $good, Request $request) {
        $rules = [
            'image' => 'required|min:3',
        ];
        $messages = [
            'required' => 'Укажите картинку!',
        ];
        $validator = Validator::make($request->all(), $rules, $messages);

        if ($validator->fails()) {
            return redirect()->route('admin.img.good', ['good' => $good->id])
                ->withErrors($validator);
        } else {
            $images = new Images();
            $images->good_id = $good->id;
            $images->image =  $request->file('image')->store('goods', 'public');
            $images->sample = $request->sample;
            $images->save();

            return  redirect()->route('admin.goods.edit', ['good' => $good->id]);
        }
    }

    public function good_del_img($id, Good $good) {
        if (!empty($id)) {
            $id = (int)$id;
            $item = Images::find($id);
            Storage::delete($item->image);
            $item->delete();
            Session::flash('message','Картинка была успешно удалена!');

            return  redirect()->route('admin.goods.edit', ['good' => $good->id]);

        } else {
            return  redirect()->route('admin.goods.edit', ['good' => $good->id]);
        }
    }

    public function convert_ajax() {
        return view('admin.goods.ajax');
    }

    public function convert_xlsx(Request $request){
        //$filepath = public_path('excel\iblock_element_admin.xls');

        //echo '<pre>';
        $code = $request->category;
        $reader = IOFactory::createReader('Xlsx');
        $spreadsheet = $reader->load('1.xlsx');
        // Только чтение данных
        $reader->setReadDataOnly(true);

        // Количество листов
        $sheetsCount = $spreadsheet->getSheetCount();
        // Данные в виде массива
        $data = $spreadsheet->getActiveSheet()->toArray();
        $i = 0;
        $name_item = 0;
        $image_item = 2;
        $stock_item = 7;
        $power_item = 9;
        $price_item = 13;
        $weight_item = 14;
        $demo_item = 8;
        $manufacturer_item = 12;

        $current = 0;
        $progress = 0;
        $all = count($data);

        foreach ($data as $k => $item):
            //print_r($item);
            if ($i == 0) {
               if ($item[$k] == 'Название') $name_item = $k;
                if ($item[$k] == 'Картинка для анонса') $image_item = $k;
                if ($item[$k] == 'Мощность, кВт ') $power_item = $k;
                if ($item[$k] == 'Наличие') $stock_item = $k;
                if ($item[$k] == 'Цена') $price_item = $k;
                if ($item[$k] == 'Вес, кг') $weight_item = $k;
                if ($item[$k] == 'Посмотреть в демозале') $demo_item = $k;
                if ($item[$k] == 'Производитель') $manufacturer_item = $k;
            } else {

                if(isset($item[$image_item])){

                    $url = $item[$image_item];

                    $file_name = pathinfo($url)['basename'];
                    //$file_name=$date . '.' . $file_extension;

                    $file = file_get_contents($url);

                    $url_file = Storage::disk('public')->put('/goods/'.$file_name, $file);

                }

                //echo "url_file: goods/".$file_name."<br>";
                //echo "title: ".$item[$name_item]."<br>";
                //echo "image: ".$item[$image_item]."<br>";
                //echo "power: ".$item[$power_item]."<br>";
                //echo "stock_count: ".$item[$stock_item]."<br>";
                $price =  trim(stristr($item[$price_item], 'руб.', true));
                //echo "price: ".$price."<br>";
                //echo "weight: ".$item[$weight_item]."<br>";
                //echo "demo: ".$item[$demo_item]."<br>";
                //echo "manufacturer: ".$item[$manufacturer_item]."<br>";
                $manufactur = trim(stristr($item[$manufacturer_item], '[', true));
                $country = Manufacturer::query()->where('name', '=', $manufactur)->get();
                //echo "country: ".$country[0]->code_country."<br>";
                //echo "<br><br>";

                $good = new Good();
                $good->category_id = $code;
                $good->title = $item[$name_item];
                $good->image = "goods/".$file_name;
                if (!empty($item[$power_item]))
                   $good->power = $item[$power_item];
                else
                    $good->power = 0;
                $good->manufacturer = $manufactur;
                $good->country = $country[0]->code_country;
                if ($item[$stock_item] == "Да")
                    $good->stock_count = 1;
                else
                    $good->stock_count = 0;
                if (!empty($item[$price_item])) {
                    $good->price = $price;
                }
                $good->weight = $item[$weight_item];
                if (!empty($item[$demo_item]))
                    $good->demo = 1;

                $good->text = "Данный товар доступен на складе и в каталоге интернет-магазина";
                $good->save();

            }
            $i++;
            $current++;
            $progress = round(($current*100)/$all);

        endforeach;

        echo "<p style='color:green'>Данные успешно были загружены! Код категории: $code</p>";
        //echo '</pre>';
    }
}