ImportController.php 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. <?php
  2. namespace App\Http\Controllers;
  3. use App\Jobs\Import\ImportJob;
  4. use App\Models\Import;
  5. use Illuminate\Http\Request;
  6. use Illuminate\Support\Facades\Log;
  7. use Illuminate\Support\Facades\Storage;
  8. use Illuminate\Support\Str;
  9. class ImportController extends Controller
  10. {
  11. protected array $data = [
  12. 'active' => 'import',
  13. 'title' => 'Импорт',
  14. 'id' => 'import',
  15. 'header' => [
  16. 'id' => 'ID',
  17. 'type' => 'Тип',
  18. 'status' => 'Статус',
  19. 'created_at' => 'Создано',
  20. 'updated_at' => 'Изменено',
  21. ],
  22. 'searchFields' => [
  23. 'id',
  24. ],
  25. ];
  26. /**
  27. * Display a listing of the resource.
  28. */
  29. public function index(Request $request)
  30. {
  31. session(['gp_import' => $request->all()]);
  32. $model = new Import;
  33. // fill filters
  34. $this->data['ranges'] = [];
  35. $this->createFilters($model, 'type', 'status');
  36. $this->createDateFilters($model, 'created_at', 'updated_at');
  37. $q = $model::query();
  38. $q->withoutGlobalScopes();
  39. $this->acceptFilters($q, $request);
  40. $this->acceptSearch($q, $request);
  41. $this->setSortAndOrderBy($model, $request);
  42. $q->orderBy($this->data['sortBy'], $this->data['orderBy']);
  43. $this->data['imports'] = $q->paginate(session('per_page', config('pagination.per_page')))->withQueryString();
  44. return view('import.index', $this->data);
  45. }
  46. public function store(Request $request)
  47. {
  48. // validate data
  49. $request->validate([
  50. 'type' => 'required|in:orders,reclamations,mafs',
  51. 'import_file' => 'required|file',
  52. ]);
  53. // load and save file
  54. $path = Str::random(2) . '/' . Str::uuid() . '.' .$request->file('import_file')->getClientOriginalExtension();
  55. Storage::disk('upload')->put($path, $request->file('import_file')->getContent());
  56. $import = Import::query()->create([
  57. 'type' => $request->type,
  58. 'status' => 'new',
  59. 'filename' => $path,
  60. ]);
  61. $import->refresh();
  62. ImportJob::dispatch($import, $request->user()->id);
  63. Log::info('Import job ' . $request->type . ' created!');
  64. return redirect()->route('import.index', session('gp_import'))->with(['success' => 'Задача импорта успешно создана!']);
  65. }
  66. public function show(Import $import)
  67. {
  68. $this->data['import'] = $import;
  69. return view('import.show', $this->data);
  70. }
  71. }