File: /var/www/ipsremont-demo/app/Http/Controllers/AddressController.php
<?php
namespace App\Http\Controllers;
use App\Http\Requests\Address\CreateRequest;
use App\Http\Requests\Address\IndexRequest;
use App\Http\Requests\Address\UpdateRequest;
use App\Http\Requests\IdRequest;
use App\Models\Address;
use App\Models\Permission;
use App\Services\Address\AddressService;
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\Support\Facades\Auth;
use Illuminate\Support\Facades\Redirect;
use Illuminate\View\View;
class AddressController extends Controller
{
use GridTrait;
/** @var string */
protected string $permission = Permission::address;
protected string $protectedRedirect = 'address.index';
protected AddressService $service;
public function __construct()
{
parent::__construct();
$this->service = new AddressService();
}
/**
* Display a listing of the resource.
*
* @param IndexRequest $request
*
* @return Application|Factory|View
*/
public function index(IndexRequest $request)
{
$data = $this->service->search($request);
$columns = Address::columns();
$main = Address::main_address();
if (Auth::user()->isService()) {
$canActions = canServiceActions(Auth::user()->getCurrentServiceId());
} else {
$canActions = true;
}
return view('address.list', compact('data', 'columns', 'main', 'canActions'))
->with(["sections" => ["main"]]);
}
/**
* Show the form for creating a new resource.
*
* @return Application|Factory|Response|View
*/
public function create()
{
if ($redirect = $this->isRedirected()) {
return $redirect;
}
$model = new Address();
$validate = new CreateRequest();
return view('address.create', compact('model', 'validate'));
}
/**
* Store a newly created resource in storage.
*
* @param CreateRequest $request
*
* @return RedirectResponse
*/
public function store(CreateRequest $request)
{
if ($redirect = $this->isRedirected()) {
return $redirect;
}
$this->service->save($request);
return redirect()->route('address.index')
->with(["messageSuccess" => __('address.messageCreate')]);
}
/**
* Show the form for editing the specified resource.
*
* @param Request $request
*
* @return Application|Factory|Response|View
*/
public function edit(IdRequest $request)
{
$model = AddressService::getById($request->id);
if ($redirect = $this->isRedirected($model->service_id)) {
return $redirect;
}
$validate = new UpdateRequest();
$route = $request->session()->get('previous_route');
return view('address.edit', compact('model', 'validate', 'route'));
}
/**
* Update the specified resource in storage.
*
* @param UpdateRequest $request
*
* @return RedirectResponse
*/
public function update(UpdateRequest $request)
{
$model = AddressService::getById($request->id);
if ($redirect = $this->isRedirected($model->service_id)) {
return $redirect;
}
$this->service->update($request);
return Redirect::to($request->redirect)
->with(["messageSuccess" => __('address.messageUpdate')]);
}
public function show(IdRequest $request)
{
$model = $this->service->getById($request->id);
return view('address.show', compact('model'));
}
/**
* Remove the specified resource from storage.
*
* @param int $id
*
* @return RedirectResponse
*/
public function delete(int $id)
{
$model = AddressService::getById($id);
if ($redirect = $this->isRedirected($model->service_id)) {
return $redirect;
}
$this->service->delete($id);
return redirect()->route('address.index')->with(["messageSuccess" => __('address.messageDelete')]);
}
}