![]() Server : Apache System : Linux server2.corals.io 4.18.0-348.2.1.el8_5.x86_64 #1 SMP Mon Nov 15 09:17:08 EST 2021 x86_64 User : corals ( 1002) PHP Version : 7.4.33 Disable Function : exec,passthru,shell_exec,system Directory : /home/corals/rentpix.corals.io/Corals/modules/RentPix/Http/Controllers/ |
<?php namespace Corals\Modules\RentPix\Http\Controllers; use Corals\Foundation\Http\Controllers\BaseController; use Corals\Modules\RentPix\DataTables\InspectionsDataTable; use Corals\Modules\RentPix\DataTables\Scopes\Driver\DriverInspectionsScope; use Corals\Modules\RentPix\DataTables\Scopes\Unit\UnitInspectionsScope; use Corals\Modules\RentPix\Http\Requests\InspectionRequest; use Corals\Modules\RentPix\Models\Driver; use Corals\Modules\RentPix\Models\Inspection; use Corals\Modules\RentPix\Models\Reservation; use Corals\Modules\RentPix\Models\Unit; use Corals\Modules\RentPix\Services\InspectionService; use Corals\Modules\Utility\Facades\ListOfValue\ListOfValues; use Illuminate\Http\Request; use Illuminate\Support\Facades\URL; use Spatie\MediaLibrary\MediaCollections\Models\Media; use Spiritix\Html2Pdf\Converter; use Spiritix\Html2Pdf\Input\UrlInput; use Spiritix\Html2Pdf\Output\DownloadOutput; use Spiritix\Html2Pdf\Output\EmbedOutput; class InspectionsController extends BaseController { protected $inspectionService; public function __construct(InspectionService $inspectionService) { $this->inspectionService = $inspectionService; $this->resource_url = config('rentPix.models.inspection.resource_url'); $this->resource_model = new Inspection(); $this->title = trans('RentPix::module.inspection.title'); $this->title_singular = trans('RentPix::module.inspection.title_singular'); $this->corals_middleware_except = ['inspectionDetails', 'inspectionPhotos', 'getInspectionPublicMedia']; parent::__construct(); } /** * @param InspectionRequest $request * @param InspectionsDataTable $dataTable * @return mixed */ public function index(InspectionRequest $request, InspectionsDataTable $dataTable) { return $dataTable->render('RentPix::inspections.index'); } /** * @param InspectionRequest $request * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View */ public function create(InspectionRequest $request) { $inspection = new Inspection(); $this->setViewSharedData([ 'title_singular' => trans('Corals::labels.create_title', ['title' => $this->title_singular]), ]); return view('RentPix::inspections.create_edit')->with(compact('inspection')); } /** * @param InspectionRequest $request * @return \Illuminate\Http\RedirectResponse|\Illuminate\Routing\Redirector */ public function store(InspectionRequest $request) { try { $inspection = $this->inspectionService->store($request, Inspection::class); flash(trans('Corals::messages.success.created', ['item' => $this->title_singular]))->success(); } catch (\Exception $exception) { log_exception($exception, Inspection::class, 'store'); } return redirectTo($this->resource_url); } /** * @param InspectionRequest $request * @param Inspection $inspection * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View */ public function edit(InspectionRequest $request, Inspection $inspection) { $this->setViewSharedData([ 'title_singular' => trans('Corals::labels.update_title', ['title' => $inspection->getIdentifier()]), ]); return view('RentPix::inspections.create_edit')->with(compact('inspection')); } /** * @param InspectionRequest $request * @param Inspection $inspection * @return \Illuminate\Http\JsonResponse */ public function update(InspectionRequest $request, Inspection $inspection) { try { $type = $request['type']; $reservation = Reservation::query()->find($request['reservation_id']); if ($inspection->reservation_id != $reservation->id || $inspection->type->value != $type) { $code = sprintf('%s-%s', $reservation->code, strtoupper($type)); $existsInspection = Inspection::query()->where('code', 'like', $code . "%")->first(); switch ($type) { case 'start': case 'end': if ($existsInspection) { $message = [ 'level' => 'error', 'message' => "Inspection with code $existsInspection->code exists", ]; return response()->json($message); } $request['code'] = $code; break; case 'update': if ($seq = Inspection::query()->where('code', 'like', $code . "%")->count()) { $request['code'] = $reservation->code . "-UPDATE-" . ++$seq; } else { $request['code'] = $reservation->code . "-UPDATE-1"; } break; } } $this->inspectionService->update($request, $inspection); flash(trans('Corals::messages.success.updated', ['item' => $this->title_singular]))->success(); } catch (\Exception $exception) { log_exception($exception, Inspection::class, 'update'); } return redirectTo($this->resource_url); } /** * @param InspectionRequest $request * @param Inspection $inspection * @return \Illuminate\Http\JsonResponse */ public function destroy(InspectionRequest $request, Inspection $inspection) { try { $this->inspectionService->destroy($request, $inspection); $message = [ 'level' => 'success', 'message' => trans('Corals::messages.success.deleted', ['item' => $this->title_singular]), ]; } catch (\Exception $exception) { log_exception($exception, Inspection::class, 'destroy'); $message = ['level' => 'error', 'message' => $exception->getMessage()]; } return response()->json($message); } /** * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View */ public function inspectionDetails(Inspection $inspection) { $listOfValues = [ 'Prompted Photos' => ListOfValues::get('rentPix_prompted_photos'), ]; return view('RentPix::inspections.details')->with(compact('inspection', 'listOfValues')); } /** * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View */ public function inspectionPhotos(Inspection $inspection) { $listOfValues = [ 'Prompted Photos' => ListOfValues::get('rentPix_prompted_photos'), ]; return view('RentPix::inspections.inspection-photos')->with(compact('inspection', 'listOfValues')); } public function generateInspectionPdf(Request $request, Inspection $inspection) { $input = new UrlInput(); $isEmbedOutput = $request->has('embed'); $viewUrl = URL::signedRoute('inspection-details', [ 'inspection' => $inspection->hashed_id, ]); $input->setUrl($viewUrl); if ($isEmbedOutput) { $converter = new Converter($input, new EmbedOutput()); } else { $converter = new Converter($input, new DownloadOutput()); } $converter->setOptions([ 'printBackground' => true, 'landscape' => true, 'format' => 'A3', 'waitUntil' => 'networkidle0', 'margin' => [ 'top' => '10px', 'bottom' => '10px', ] ]); $nodePath = config('rentPix.models.inspection.node_path'); $converter->setNodePath($nodePath); $output = $converter->convert(); $fileName = $inspection->getPdfFileName(); if ($isEmbedOutput) { $output->embed($fileName); } else { $output->download($fileName); } } /** * @param Inspection $inspection * @return \Illuminate\Http\JsonResponse */ public function openInspection(Inspection $inspection) { try { $this->inspectionService->updateInspectionStatus($inspection, 'open'); $message = [ 'level' => 'success', 'message' => trans('Corals::messages.success.updated', ['item' => $this->title_singular]), ]; } catch (\Exception $exception) { log_exception($exception, Inspection::class, 'openInspection'); $message = ['level' => 'error', 'message' => $exception->getMessage()]; } return response()->json($message); } /** * @param Inspection $inspection * @return \Illuminate\Http\JsonResponse */ public function completeInspection(Inspection $inspection) { try { $this->inspectionService->updateInspectionStatus($inspection, 'completed'); $message = [ 'level' => 'success', 'message' => trans('Corals::messages.success.updated', ['item' => $this->title_singular]), ]; } catch (\Exception $exception) { log_exception($exception, Inspection::class, 'completeInspection'); $message = ['level' => 'error', 'message' => $exception->getMessage()]; } return response()->json($message); } /** * @param Inspection $inspection * @return \Illuminate\Http\JsonResponse */ public function fetchDrivers(Inspection $inspection) { try { $this->inspectionService->fetchInspectionDrivers($inspection); $message = [ 'level' => 'success', 'message' => 'The drivers have been fetched successfully', ]; } catch (\Exception $exception) { log_exception($exception, Inspection::class, 'fetchDrivers'); $message = ['level' => 'error', 'message' => $exception->getMessage()]; } return response()->json($message); } /** * @param Inspection $inspection * @param Driver $driver * @return \Illuminate\Http\JsonResponse */ public function setPrimaryDriver(Inspection $inspection, Driver $driver) { try { $this->inspectionService->setPrimaryDriver($inspection, $driver); $message = [ 'level' => 'success', 'message' => 'The primary inspection driver have been updated successfully', ]; } catch (\Exception $exception) { log_exception($exception, Driver::class, 'destroy'); $message = ['level' => 'error', 'message' => $exception->getMessage()]; } return response()->json($message); } /** * @param Inspection $inspection * @param Driver $driver * @return \Illuminate\Http\JsonResponse */ public function switchMediaInspection(Request $request) { try { if (!user()->can('RentPix::inspection.update')) { abort(403, trans('Corals::exceptions.403')); } $this->validate($request, [ 'inspection_id' => 'required', 'media_id' => 'required', ]); $inspection = Inspection::query()->findOrFail($request->get('inspection_id')); $media = Media::query()->findOrFail($request->get('media_id')); $media->model_id = $inspection->id; $media->save(); $message = [ 'level' => 'success', 'message' => 'The media inspection have been updated successfully', ]; } catch (\Exception $exception) { log_exception($exception, Driver::class, 'destroy'); $message = ['level' => 'error', 'message' => $exception->getMessage()]; $code = 400; } return response()->json($message, $code ?? 200); } public function unitInspections( InspectionRequest $request, Unit $unit, InspectionsDataTable $dataTable ) { if ($request->has('tab_html')) { $modelDataTable = new InspectionsDataTable(); $modelDataTable->setResourceUrl($request->url()); return $modelDataTable->render('layouts.crud.ajax_datatable', ['includeAssets' => true]); } $dataTable->addScope(new UnitInspectionsScope($unit)); return $dataTable->renderAjaxAndActions(); } /** * @param InspectionRequest $request * @param Driver $driver * @param InspectionsDataTable $dataTable * @return mixed|null */ public function driverInspections(InspectionRequest $request, Driver $driver, InspectionsDataTable $dataTable) { if ($request->has('tab_html')) { $modelDataTable = new InspectionsDataTable(); $modelDataTable->setResourceUrl($request->url()); return $modelDataTable->render('layouts.crud.ajax_datatable', ['includeAssets' => true]); } $dataTable->addScope(new DriverInspectionsScope($driver)); return $dataTable->renderAjaxAndActions(); } public function getInspectionPublicMedia(Request $request, $mediaId, $view) { abort_if(!in_array($view, ['prompted-photo', 'driver-photo']), 404); $media = Media::query()->findOrFail($mediaId); return view('RentPix::inspections.media.' . $view)->with(compact('media')); } /** * @param Request $request * @param Inspection $inspection * @return \Illuminate\Http\JsonResponse */ public function restore(Request $request, Inspection $inspection) { try { $inspectionCode = $inspection->code; $this->inspectionService->restore($request, $inspection); $message = [ 'level' => 'success', 'message' => trans('Corals::messages.success.restore', ['item' => $inspectionCode]), ]; } catch (\Exception $exception) { log_exception($exception, Inspection::class, 'restore'); $message = ['level' => 'error', 'message' => $exception->getMessage()]; $code = 400; } return response()->json($message, $code ?? 200); } /** * @param InspectionRequest $request * @param Inspection $inspection * @return \Illuminate\Http\JsonResponse */ public function hardDelete(InspectionRequest $request, Inspection $inspection) { try { $inspectionCode = $inspection->code; $this->inspectionService->hardDelete($request, $inspection); $message = [ 'level' => 'success', 'message' => trans('Corals::messages.success.deleted', ['item' => $inspectionCode]), ]; } catch (\Exception $exception) { log_exception($exception, Inspection::class, 'hardDelete'); $message = ['level' => 'error', 'message' => $exception->getMessage()]; } return response()->json($message); } /** * @param Request $request * @param Inspection $inspection * @return \Illuminate\Contracts\Foundation\Application|\Illuminate\Contracts\View\Factory|\Illuminate\Contracts\View\View */ public function addNote(Request $request, Inspection $inspection) { $model = $inspection; return view('RentPix::add_note_modal')->with(compact('model')); } }