File: /var/www/ipsremont-demo/app/Http/Controllers/ErrorsController.php
<?php
namespace App\Http\Controllers;
use App\Http\Requests\Errors\IndexRequest;
use App\Http\Requests\ImportRequest;
use App\Http\Requests\UploadRequest;
use App\Models\ErrorCodes;
use App\Models\Permission;
use App\Services\Errors\ErrorsService;
use PhpOffice\PhpSpreadsheet\IOFactory;
class ErrorsController extends Controller
{
protected ErrorsService $service;
public function __construct()
{
parent::__construct();
$this->service = new ErrorsService();
}
public function index(IndexRequest $request)
{
$data = $this->service->search($request);
$columns = ErrorCodes::columns();
return view('errors.list', compact('data', 'columns'));
}
public function form()
{
return view('errors.import');
}
public function upload(UploadRequest $request)
{
if (!can(Permission::servicesImport)) {
redirect()->route('errors.index');
}
$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('errors.index', $request->id)
->with("messageError", __('errors.wrongFile'));
}
try {
$reader = IOFactory::createReaderForFile($file);
$reader->setReadDataOnly(true);
$spreadsheet = $reader->load($file);
$worksheet = $spreadsheet->getActiveSheet();
foreach ($worksheet->getRowIterator() as $row) {
$cellIterator = $row->getCellIterator();
$cellIterator->setIterateOnlyExistingCells(FALSE);
$data = [];
foreach ($cellIterator as $cell) {
array_push($data, $cell->getValue());
}
if($data[0] && is_numeric($data[0]) && $data[0] != 0 && trim($data[1]) && $data[1] != 'не используется') {
ErrorsService::fillStorage($data);
}
}
return redirect()->route('errors.index')
->with("messageSuccess", __('errors.successfulImport'));
} catch (\Exception $e) {
return redirect()->route('errors.index')
->with("messageError", __('errors.wrongFile'));
}
}
/**
* Remove the specified resource from storage.
*
* @param int $id
* @return \Illuminate\Http\RedirectResponse
*/
public function delete($id)
{
ErrorsService::delete($id);
return redirect()->route('errors.index')
->with('messageSuccess', __('errors.messageDelete'));
}
}