Spamworldpro Mini Shell
Spamworldpro


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/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Current File : /home/corals/rentpix.corals.io/Corals/modules/RentPix/Http/Controllers/ReservationsController.php
<?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);
    }
}

Spamworldpro Mini