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/job-board.corals.io/Corals/modules/Reservation/Services/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Current File : /home/corals/job-board.corals.io/Corals/modules/Reservation/Services/ReservationService.php
<?php

namespace Corals\Modules\Reservation\Services;


use Corals\Foundation\Services\BaseServiceClass;
use Corals\Modules\Entity\Models\Entry;
use Corals\Modules\Reservation\Facades\Invoices;
use Corals\Modules\Reservation\Facades\RatesFacade;
use Corals\Modules\Reservation\Facades\ReservationFacade;
use Corals\Modules\Reservation\Models\LineItem;
use Corals\Modules\Reservation\Models\Reservation;
use Corals\Modules\Reservation\Models\Service;
use Illuminate\Foundation\Validation\ValidatesRequests;
use Illuminate\Http\Request;
use Illuminate\Support\Carbon;

class ReservationService extends BaseServiceClass
{
    protected $excludedRequestParams = [
        'use_entity_models', 'line_items',
        'max_reservations_quantity', 'requested_quantity'
    ];

    use ValidatesRequests;

    /**
     * @param $request
     * @param $additionalData
     * @throws \Exception
     */
    public function preStoreUpdate($request, &$additionalData)
    {
        $additionalData['period_in_minutes'] = Carbon::parse($request->starts_at)->diffInMinutes($request->ends_at);

        $service = Service::find($request->get('service_id'));

        $useEntity = (bool)$service->getProperty('use_entity_models', null, 'bool');

        if ($useEntity) {
            $additionalData['object_type'] = getMorphAlias(Entry::class);
        } elseif ($service->object_type) {
            $additionalData['object_type'] = $service->object_type;
        } else {
            $additionalData['object_type'] = getMorphAlias(Service::class);
            $additionalData['object_id'] = $service->id;
        }

        $request->request->add($additionalData);

        $this->checkReservationAvailability($request);
    }

    /**
     * @param Request $request
     * @return \Illuminate\Http\JsonResponse
     * @throws \Throwable
     *
     */
    public function renderLineItem(Request $request)
    {
        $this->validate($request, [
            'line_item' => 'required'
        ]);

        $lineItem = LineItem::query()->findOrFail($request->get('line_item'));

        $parameters = [
            'startsAt' => $request->get('line_item_form_starts_at'),
            'endsAt' => $request->get('line_item_form_ends_at'),
            'reservation_id' => hashids_decode($request->get('reservation_hashed_id'))
        ];

        $lineItem = RatesFacade::getLineItemAsArray($lineItem, $parameters);

        $index = $request->get('index');

        $view = view('Reservation::reservations.partials.line_item_form_fields')
            ->with(compact('lineItem', 'index'))
            ->render();

        return response()->json([
            'view' => $view,
            'lineItemCode' => $lineItem['code']
        ]);
    }

    /**
     * @param Request $request
     * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View
     */
    public function getLineItemSection(Request $request)
    {
        $service = Service::query()->findOrFail($request->get('service_id'));

        $selectedLineItems = $request->get('selected_line_items', []);

        $lineItems = RatesFacade::getServiceLineItems($service, $request->all(), $selectedLineItems);

        $optionalLineItemsOptions = $service->optionalLineItems()->pluck('res_line_items.name', 'res_line_items.id')->toArray();

        $reservationHashedId = hashids_encode($request->get('reservation_id'));

        return view('Reservation::reservations.partials.line_items_section')
            ->with(compact('lineItems', 'optionalLineItemsOptions', 'reservationHashedId'));
    }

    /**
     * @param $request
     * @param $additionalData
     */
    public function postStoreUpdate($request, &$additionalData)
    {
        Invoices::generate($this->model, $request->get('line_items'));
    }

    /**
     * @param $request
     * @param $reservation
     */
    public function destroy($request, $reservation)
    {
        if ($invoice = $reservation->invoice) {
            Invoices::deleteInvoice($reservation->invoice);
        }
        parent::destroy($request, $reservation);
    }

    /**
     * @param $request
     * @throws \Exception
     */
    public function checkReservationAvailability($request)
    {
        $parameters = [
            'starts_at' => $request->get('starts_at'),
            'ends_at' => $request->get('ends_at'),
            'object_id' => $request->get('object_id'),
            'object_type' => $request->get('object_type'),
            'reservation_id' => optional($request->route('reservation'))->id,
            'max_reservations_quantity' => $request->get('max_reservations_quantity', 1),
            'requested_quantity' => $request->get('requested_quantity', 0),
        ];


        ReservationFacade::checkAvailability($parameters);
    }

    /**
     * @param $reservation
     */
    public function cancel($reservation): void
    {
        $reservation->update(['status' => 'cancelled']);

        Invoices::cancelInvoice($reservation->invoice);

        event('notifications.reservation.reservation_cancelled', [
            'reservation' => $reservation
        ]);
    }

    /**
     * @param Reservation $reservation
     */
    public function confirm(Reservation $reservation): void
    {
        $reservation->update(['status' => 'confirmed']);

        event('notifications.reservation.reservation_confirmed', [
            'reservation' => $reservation
        ]);
    }
}

Spamworldpro Mini