File: /var/www/ipsremont-demo/app/Http/Controllers/CategoriesController.php
<?php
namespace App\Http\Controllers;
use App\Http\Requests\Category\CreateRequest;
use App\Http\Requests\Category\IndexRequest;
use App\Http\Requests\Category\UpdateRequest;
use App\Http\Requests\Category\UploadRequest;
use App\Http\Requests\ImportRequest;
use App\Models\Category;
use App\Models\Permission;
use App\Services\Category\CategoryService;
use App\Traits\GridTrait;
use Illuminate\Contracts\Foundation\Application;
use Illuminate\Contracts\View\Factory;
use Illuminate\Http\RedirectResponse;
use Illuminate\Http\Request;
use Illuminate\Http\Response;
use Illuminate\View\View;
class CategoriesController extends Controller
{
use GridTrait;
/** @var string */
protected string $permission = Permission::categories;
protected CategoryService $service;
public function __construct()
{
parent::__construct();
$this->service = new CategoryService();
}
public function index(IndexRequest $request)
{
$data = $this->service->search($request);
$columns = Category::columns();
return view('categories.list', (compact('data', 'columns')));
}
/**
* Show the form for creating a new resource.
*
* @return Application|Factory|Response|View
*/
public function create()
{
$model = new Category();
$validate = new CreateRequest();
return view('categories.create', compact('model', 'validate'));
}
/**
* Store a newly created resource in storage.
*
* @param CreateRequest $request
*
* @return RedirectResponse
*/
public function store(CreateRequest $request)
{
$this->service->save($request);
return redirect()->route('categories.index')->with(["messageSuccess" => __('categories.messageCreate')]);
}
/**
* Show the form for editing the specified resource.
*
* @param Request $request
*
* @return Application|Factory|Response|View
*/
public function edit(Request $request)
{
$data = CategoryService::getById($request->id);
$validate = new UpdateRequest();
return view('categories.edit', compact('data', 'validate'));
}
/**
* Update the specified resource in storage.
*
* @param UpdateRequest $request
*
* @return RedirectResponse
*/
public function update(UpdateRequest $request)
{
$this->service->update($request);
return redirect()->route('categories.index')->with(["messageSuccess" => __('categories.messageUpdate')]);
}
/**
* Remove the specified resource from storage.
*
* @param int $id
*
* @return RedirectResponse
*/
public function delete(int $id)
{
$this->service->delete($id);
return redirect()->route('categories.index')
->with(["messageSuccess" => __('categories.messageDelete')]);
}
public function importView()
{
return view('categories.import');
}
/**
* @param UploadRequest $request
*/
public function upload(UploadRequest $request)
{
$file = $request->file('file')->store('app/public/import');
return response()->json(['success' => $file]);
}
public function import(ImportRequest $request)
{
$file = storage_path() . '/' . $request->filePath[0];
if (!file_exists($file)) {
return redirect()->route('categories.import');
}
$res = $this->service->saveCategoriesFromCsv($file);
$result = [];
if ($res['errors']) {
$result['messageError'] = __('categories.errors', ['x' => $res['errors']]);
}
if ($res['success']) {
$result['messageSuccess'] = __('categories.success', ['x' => $res['success']]);
}
return redirect()->route('categories.index')->with($result);
}
}