![]() 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\Foundation\Search\Search; use Corals\Modules\RentPix\DataTables\ReservationsDataTable; use Corals\Modules\RentPix\DataTables\Scopes\Driver\DriverReservationsScope; use Corals\Modules\RentPix\DataTables\Scopes\Unit\UnitReservationsScope; use Corals\Modules\RentPix\Models\Driver; use Corals\Modules\RentPix\Models\Reservation; use Corals\Modules\RentPix\Models\Unit; use Corals\Modules\RentPix\Services\ReservationService; use Illuminate\Http\Request; use Illuminate\Support\Facades\URL; class ReservationsController extends BaseController { protected $reservationService; public function __construct(ReservationService $reservationService) { $this->reservationService = $reservationService; $this->resource_url = config('rentPix.models.reservation.resource_url'); $this->resource_model = new Reservation(); $this->title = trans('RentPix::module.reservation.title'); $this->title_singular = trans('RentPix::module.reservation.title_singular'); $this->corals_middleware_except = ['reservationDetails']; parent::__construct(); } /** * @param Request $request * @param ReservationsDataTable $dataTable * @return mixed */ public function index(Request $request, ReservationsDataTable $dataTable) { return $dataTable->render('RentPix::reservations.index'); } public function show(Request $request, Reservation $reservation) { return view('RentPix::reservations.modal')->with(compact('reservation')); } /** * @param Request $request * @return \Illuminate\Contracts\Foundation\Application|\Illuminate\Contracts\View\Factory|\Illuminate\Contracts\View\View|\Illuminate\Http\JsonResponse|int */ public function reservationDetails(Request $request) { $code = $request->get('code'); $signature = $request->get('signature'); if (!$code || !$signature) { abort(400); } $reservation = Reservation::query()->where('code', $code)->first(); if (!$reservation) { $error_code = 404; $message = 'Reservation Not Found'; return view('RentPix::reservations.public_error')->with(compact('error_code', 'message')); } if ($signature != md5($code . '|' . $reservation->integration_id)) { $error_code = 403; $message = 'Reservation Signature is Invalid'; return view('RentPix::reservations.public_error')->with(compact('error_code', 'message')); } try { if ($reservation->inspections()->count() == 1) { $inspection = $reservation->inspections()->first(); return redirect(URL::signedRoute('inspection-details', ['inspection' => \Corals\Foundation\Facades\Hashids::encode($inspection->id)])); } return view('RentPix::reservations.details')->with(compact('reservation')); } catch (\Exception $exception) { report($exception); return redirect(url('/')); } } public function unitReservations( Request $request, Unit $unit, ReservationsDataTable $dataTable ) { if ($request->has('tab_html')) { $modelDataTable = new ReservationsDataTable(); $modelDataTable->setResourceUrl($request->url()); return $modelDataTable->render('layouts.crud.ajax_datatable', ['includeAssets' => true]); } $dataTable->addScope(new UnitReservationsScope($unit)); return $dataTable->renderAjaxAndActions(); } /** * @param Request $request * @param Driver $driver * @param ReservationsDataTable $dataTable * @return mixed|null */ public function driverReservations(Request $request, Driver $driver, ReservationsDataTable $dataTable) { if ($request->has('tab_html')) { $modelDataTable = new ReservationsDataTable(); $modelDataTable->setResourceUrl($request->url()); return $modelDataTable->render('layouts.crud.ajax_datatable', ['includeAssets' => true]); } $dataTable->addScope(new DriverReservationsScope($driver)); return $dataTable->renderAjaxAndActions(); } /** * @param Request $request * @param Reservation $reservation * @return \Illuminate\Http\JsonResponse */ public function destroy(Request $request, Reservation $reservation) { try { $this->reservationService->destroy($request, $reservation); $message = [ 'level' => 'success', 'message' => trans('Corals::messages.success.deleted', ['item' => $this->title_singular]), ]; } catch (\Exception $exception) { log_exception($exception, Reservation::class, 'destroy'); $message = ['level' => 'error', 'message' => $exception->getMessage()]; } return response()->json($message); } /** * @param Request $request * @param Search $search * @return array */ public function search(Request $request, Search $search) { $q = trim($request->get('q')); if (!$q) { return []; } $items['items'] = []; $reservations = Reservation::query() ->select('pix_reservations.*') ->latest('pix_reservations.id') ->limit(20); $config = [ 'title_weight' => 10, 'content_weight' => 20, 'enable_wildcards' => true ]; $search->AddSearchPart($reservations, $q, Reservation::class, $config); foreach ($reservations->get() as $reservation) { $items['items'][] = [ 'code' => join(', ', [ '<i class="fa fa-calendar-check-o fa-fw"></i> ' . $reservation->present('code'), '<i class="fa fa-truck fa-fw"></i> ' . optional($reservation->unit)->present('code'), sprintf("%s, %s (%s | %s)", optional($reservation->customer)->present('name'), optional($reservation->customer)->present('full_name'), optional($reservation->customer)->present('email'), optional($reservation->customer)->present('phone') ) ]) ]; } return $items; } /** * @param Reservation $reservation * @return \Illuminate\Http\JsonResponse */ public function reFetchReservation(Reservation $reservation) { try { $this->reservationService->reFetchReservation($reservation); $message = [ 'level' => 'success', 'message' => 'The reservation have been re-fetched successfully', ]; } catch (\Exception $exception) { log_exception($exception, Reservation::class, 'reFetchReservation'); $message = ['level' => 'error', 'message' => $exception->getMessage()]; } return response()->json($message); } }