File: /var/www/ipsremont-demo/app/Http/Controllers/RegionController.php
<?php
namespace App\Http\Controllers;
use App\Http\Requests\Region\CreateRequest;
use App\Http\Requests\Region\IndexRequest;
use App\Http\Requests\Region\UpdateRequest;
use App\Models\Currency;
use App\Models\Permission;
use App\Models\Region;
use App\Repository\Region\RegionRepository;
use App\Traits\GridTrait;
use Illuminate\Http\RedirectResponse;
use Illuminate\View\View;
class RegionController extends Controller
{
use GridTrait;
protected string $permission = Permission::regions;
protected RegionRepository $repository;
public function __construct()
{
parent::__construct();
$this->repository = new RegionRepository();
}
public function index(IndexRequest $request): View
{
$data = $this->repository->search($request);
$columns = Region::columns();
return view('regions.list', (compact('data', 'columns')));
}
public function create(): View
{
$model = new Region();
$validate = new CreateRequest();
$branches = $model->getAvailableBranches()->pluck('name', 'id')->toArray();
$currencies = Currency::query()->get()->pluck('name', 'id')->toArray();
return view('regions.create', compact('model', 'validate', 'currencies', 'branches'))->with(['sections' => ['branches', 'currency_id', 'region_id']]);
}
public function store(CreateRequest $request): RedirectResponse
{
$this->repository->save($request);
return redirect()->route('regions.index')->with(['messageSuccess' => __('regions.messageCreate')]);
}
public function edit(int $id)
{
/** @var Region $region */
$region = RegionRepository::getById($id);
if (empty($region)) {
return redirect()->route('regions.index')->with(['messageSuccess' => __('regions.RegionNotFound')]);
}
$validate = new UpdateRequest();
$branchesRelation = $region->branches()->get()->pluck('name', 'id')->toArray();
$branchesRelation = array_keys($branchesRelation);
$branches = $region->getAvailableBranches()->pluck('name', 'id')->toArray();
$currencies = Currency::query()->get()->pluck('name', 'id')->toArray();
return view('regions.edit', compact('region', 'validate', 'currencies', 'branches', 'branchesRelation'))->with(['sections' => ['branches', 'currency_id', 'region_id']]);
}
public function update(UpdateRequest $request): RedirectResponse
{
$this->repository->update($request);
// TODO Сделал для тестов потом надо убрать
return redirect()->route('regions.edit', $request->id)->with(['messageSuccess' => __('regions.messageUpdate')]);
return redirect()->route('regions.index')->with(['messageSuccess' => __('regions.messageUpdate')]);
}
public function delete(int $id): RedirectResponse
{
$model = RegionRepository::getById($id);
if (count($model->branches()->get())) {
return redirect()->route('regions.index')->with(['messageError' => __('regions.canNotDeleteMessage')]);
}
$this->repository->delete($id);
return redirect()->route('regions.index')->with(['messageSuccess' => __('regions.messageDelete')]);
}
}