![]() 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/ |
<?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 ]); } }