/
marklis
/
transport
Обзор
Документация
Войти
/
marklis
/
transport
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
app/Http/Controllers/TripController.php
183 строки
6 KB
Мамонов Алексей Анатольевич
Маршрут следования
05 май 2025, 10:10
05 май 2025, 10:10
9961494
Код
Авторство
О чём код?
<?php namespace App\Http\Controllers; use App\Contracts\Services\{TripServiceContract as Service, TimezoneServiceContract, GlobalSettingsServiceContract}; use Illuminate\Http\{RedirectResponse, Response, Request}; use Illuminate\Support\Facades\Auth; use Carbon\Carbon; use Inertia\{Inertia, Response as InertiaResponse}; use Symfony\Component\HttpFoundation\StreamedResponse; class TripController extends BaseController { protected Service $service; protected TimezoneServiceContract $timezoneService; protected GlobalSettingsServiceContract $globalSettingsService; public function __construct( Service $service, TimezoneServiceContract $timezoneService, GlobalSettingsServiceContract $globalSettingsService ) { $this->service = $service; $this->timezoneService = $timezoneService; $this->globalSettingsService = $globalSettingsService; } public function index(): InertiaResponse { $trips = $this->service->get([], ['operator_id' => Auth::id()], 'created_at', 'desc'); foreach ($trips as $trip) { $datetime = new Carbon($trip->declared_start_datetime); $trip->date = $datetime->toDateString(); $trip->timezone_title = $trip->timezone->title; if ($trip->route) { $route = $trip->route; $trip->start = array_shift($route) ?? ''; $trip->final = array_pop($route) ?? ''; $trip->points = implode(" - ", $route); $trip->separator = ($trip->points !== "") ? " - " : ""; } else { $trip->start = ''; $trip->final = ''; $trip->points = ''; $trip->separator = ''; } } return Inertia::render('Trip/Index', [ 'trips' => $trips, 'token' => csrf_token(), 'rights' => $this->getRights(), 'routes' => [ 'scanQrCode' => route('qrCode.scan'), 'edit' => route('trips.edit'), 'createAndDownloadReport' => route('trips.createAndDownloadReport') ], 'filterRequest' => [] ]); } public function filter(Request $request): InertiaResponse { return Inertia::render('Trip/Index', [ 'trips' => $this->service->searchByManyParameters($request->collect()), 'token' => csrf_token(), 'rights' => $this->getRights(), 'routes' => [ 'scanQrCode' => route('qrCode.scan'), 'edit' => route('trips.edit'), 'createAndDownloadReport' => route('trips.createAndDownloadReport') ], 'filterRequest' => $request->collect()->toArray() ]); } public function show(string $id): InertiaResponse { $trip = $this->service->find([], ['id' => $id]); $trip->timezone_title = $trip->timezone->title; return Inertia::render('Trip/Show', [ 'trip' => $trip, 'rights' => $this->getRights(), 'routes' => [ 'scanQrCode' => route('qrCode.scan'), 'edit' => route('trips.edit') ] ]); } public function create(): InertiaResponse { return Inertia::render('Trip/Create', [ 'timezones' => $this->timezoneService->get([], [], 'hours'), 'rights' => $this->getRights(), 'contractorEmails' => Auth::user()->contractor_emails ?? [''], 'timezoneId' => Auth::user()->timezone_id ]); } public function store(Request $request): RedirectResponse { $request->validate([ 'request_number' => 'required|string|max:255|unique:trips', 'auto_number' => 'required|string|max:255', 'declared_start_datetime' => 'required', 'declared_final_datetime' => 'required' ]); $this->service->create($request->collect()); return redirect(route('trips.index')); } public function edit(Request $request): InertiaResponse { $model = $this->service->find([], ['id' => $request->input('id')]); return Inertia::render('Trip/Edit', [ 'timezones' => $this->timezoneService->get([], [], 'hours'), 'model' => $model, 'rights' => $this->getRights() ]); } public function update(Request $request): RedirectResponse { $request->validate([ 'request_number' => 'required|string|max:255', 'auto_number' => 'required|string|max:255', 'declared_start_datetime' => 'required', 'declared_final_datetime' => 'required' ]); $this->service->update($request->collect()); return redirect(route('trips.index')); } public function destroy(Request $request): void { $this->service->delete($request->input('id')); } public function enterPin(Request $request): InertiaResponse { $autoNumber = $request->input('auto_number'); $status = $this->service->getStatus($autoNumber); return Inertia::render('Trip/EnterPin', [ 'autoNumber' => $request->input('auto_number'), 'isActive' => $status['isActive'], 'isStart' => $status['isStart'] ]); } public function setActualDatetimeFromApp(Request $request): Response { $result = $this->service->setActualDatetimeFromApp($request->collect()); if ($result) { return response('ОК', 200); } else { return response('Неверный QR-код', 400); } } public function setActualDatetime(Request $request): Response { $result = $this->service->setActualDatetime($request->collect()); if ($result['status']) { return response(['id' => $result['id'], 'phase' => $result['phase']], 200); } else { return response('Неверный PIN-код', 400); } } public function createAndDownloadReport(Request $request): StreamedResponse { return $this->service->createAndDownloadReport(json_decode($request->input('trips'))); } }