public function bookingPhase2(Request $request) { // Requests $adults = $request->get('adults'); $children = $request->get('children') ?? 0; // number of children $infants = $request->get('infants') ?? 0; // number of infants $extraBed = $request->get('extra_bed') ?? 0; // number of extra services (beds) $guestName = $request->get('guest_name'); // $guestLastName = $request->get('guest_last_name'); $guestCellPhone = $request->get('guest_cellphone'); $guestNationality = $request->get('guest_nationality'); // ['iranian', 'other'] $guestNationalID = $request->get('guest_national_id'); $accommodationBookingId = $request->get('accommodation_booking_id'); $roomId = $request->get('room_id'); Log::info( 'The request for booking phase 2 is received with this data: ' . json_encode($request->all()) ); // Objects $accoBookingObject = AccommodationBooking::where('id', $accommodationBookingId)->first(); $fromDate = Carbon::parse($accoBookingObject->from_date); $toDate = Carbon::parse($accoBookingObject->to_date); $numberOfStayingInDays = $fromDate->diffInDays($toDate); // get accommodationRoom for validating the request $accommodationRoom = AccommodationRoom::where('accommodation_id', $accoBookingObject->accommodation_id)->first(); $message = ''; $period = CarbonPeriod::create($accoBookingObject->from_date, $accoBookingObject->to_date); $fPrice = []; foreach ($period as $date) { $formattedDate = $date->format('Y-m-d'); $roomprice = RoomPricingHistory::where('accommodation_room_id', $roomId) ->whereDate('from_date', '<=', $formattedDate) ->whereDate('to_date', '>=', $formattedDate) ->orderBy('created_at', 'desc') ->first(); if (!$roomprice) { continue; } $lastPriceWithDiscount = $roomprice->sales_price - ($roomprice->sales_price * ($roomprice->discount_percent / 100)); $fPrice[] = $lastPriceWithDiscount; } $totalRawPrice = collect($fPrice)->sum(); // SUm of prices for each night of staying without calculating any extra charges $pricePerNight = round($totalRawPrice / $numberOfStayingInDays, 2); // // get accommodationRoom for validating the request // $accommodationRoom = AccommodationRoom::where('accommodation_id', $accoBookingObject->accommodation_id)->first(); // $message = ''; if ( $children > $accommodationRoom->childs_count ) { $message .= 'Invalid number of children which is ' . $accommodationRoom->childs_count; } elseif ($extraBed > $accommodationRoom->extra_bed_count) { $message .= 'Invalid number of extra bed which is ' . $accommodationRoom->extra_bed_count; } elseif ($adults > $accommodationRoom->bed_count) { $message .= 'Invalid number of adults which is ' . $accommodationRoom->bed_count; } if ($message !== '') { return $this->sendError( 'Invalid Booking', $message ); } // $accommodationObject = Accommodation::where('id', $accoBookingObject->accommodation_id)->first(); // $childAge = $accommodationObject->child_age; // $infantAge = $accommodationObject->infant_age;; $extraPrice = 0; // the line below calculates the extra charges according to the children and infants during the staying nights $extraPrice += ($pricePerNight / 2) * $children * $numberOfStayingInDays; // extra bed price in the given period $pricingHistory = RoomPricingHistory::where('accommodation_room_id', $roomId) ->whereDate('from_date', '<', $fromDate)->whereDate('to_date', '>', $toDate)->first(); $extraBedPrice = $pricingHistory->extra_bed_price ?? 0; $halfChargePrice = $pricingHistory->half_charge_price ?? 0; $halfBoardPrice = $pricingHistory->half_board_price ?? 0; $fullBoardPrice = $pricingHistory->full_board_price ?? 0; // final price is calculated by adding payable price and extra charge $finalPrice = (int) round( $totalRawPrice + $extraPrice + $extraBedPrice + $halfBoardPrice + $halfChargePrice + $fullBoardPrice, 0 ); // Update payable price with the computed final price AccommodationBooking::where('id', $accommodationBookingId)->update(['payable_price' => $finalPrice]); // Add a log in accommodation_booking_accommodation_room try { DB::table('accommodation_booking_accommodation_room') ->insert([ 'accommodation_booking_id' => $accommodationBookingId, 'accommodation_room_id' => $roomId, 'guest_national_number' => $guestNationalID, 'guest_first_name' => $guestName, 'guest_last_name' => $guestLastName, 'guest_cell_phone' => $guestCellPhone, 'guest_nationality_id' => $guestNationality, 'is_deleted' => 0, 'created_at' => Carbon::now(), 'updated_at' => Carbon::now() ]); } catch (\Exception $ex) { Log::error('Error during inserting accommodation_booking_accommodation_room: ' . $ex->getMessage()); return $this->sendError( 'Error during inserting accommodation_booking_accommodation_room', 'Error during inserting accommodation_booking_accommodation_room.' ); } return $this->sendResponse($finalPrice, 'final price retrieved successfully.'); } public function bookingPhase2(Request $request) { // Requests $adults = $request->get('adults'); $children = $request->get('children') ?? 0; // number of children $infants = $request->get('infants') ?? 0; // number of infants $extraBed = $request->get('extra_bed') ?? 0; // number of extra services (beds) $guestName = $request->get('guest_name'); // $guestLastName = $request->get('guest_last_name'); $guestCellPhone = $request->get('guest_cellphone'); $guestNationality = $request->get('guest_nationality'); // ['iranian', 'other'] $guestNationalID = $request->get('guest_national_id'); $accommodationBookingId = $request->get('accommodation_booking_id'); $roomId = $request->get('room_id'); Log::info( 'The request for booking phase 2 is received with this data: ' . json_encode($request->all()) ); // Objects $accoBookingObject = AccommodationBooking::where('id', $accommodationBookingId)->first(); $fromDate = Carbon::parse($accoBookingObject->from_date); $toDate = Carbon::parse($accoBookingObject->to_date); $numberOfStayingInDays = $fromDate->diffInDays($toDate); // get accommodationRoom for validating the request $accommodationRoom = AccommodationRoom::where('accommodation_id', $accoBookingObject->accommodation_id)->first(); $message = ''; $period = CarbonPeriod::create($accoBookingObject->from_date, $accoBookingObject->to_date); $fPrice = []; foreach ($period as $date) { $formattedDate = $date->format('Y-m-d'); $roomprice = RoomPricingHistory::where('accommodation_room_id', $roomId) ->whereDate('from_date', '<=', $formattedDate) ->whereDate('to_date', '>=', $formattedDate) ->orderBy('created_at', 'desc') ->first(); if (!$roomprice) { continue; } $lastPriceWithDiscount = $roomprice->sales_price - ($roomprice->sales_price * ($roomprice->discount_percent / 100)); $fPrice[] = $lastPriceWithDiscount; } $totalRawPrice = collect($fPrice)->sum(); // SUm of prices for each night of staying without calculating any extra charges $pricePerNight = round($totalRawPrice / $numberOfStayingInDays, 2); // // get accommodationRoom for validating the request // $accommodationRoom = AccommodationRoom::where('accommodation_id', $accoBookingObject->accommodation_id)->first(); // $message = ''; if ( $children > $accommodationRoom->childs_count ) { $message .= 'Invalid number of children which is ' . $accommodationRoom->childs_count; } elseif ($extraBed > $accommodationRoom->extra_bed_count) { $message .= 'Invalid number of extra bed which is ' . $accommodationRoom->extra_bed_count; } elseif ($adults > $accommodationRoom->bed_count) { $message .= 'Invalid number of adults which is ' . $accommodationRoom->bed_count; } if ($message !== '') { return $this->sendError( 'Invalid Booking', $message ); } // $accommodationObject = Accommodation::where('id', $accoBookingObject->accommodation_id)->first(); // $childAge = $accommodationObject->child_age; // $infantAge = $accommodationObject->infant_age;; $extraPrice = 0; // the line below calculates the extra charges according to the children and infants during the staying nights $extraPrice += ($pricePerNight / 2) * $children * $numberOfStayingInDays; // extra bed price in the given period $pricingHistory = RoomPricingHistory::where('accommodation_room_id', $roomId) ->whereDate('from_date', '<', $fromDate)->whereDate('to_date', '>', $toDate)->first(); $extraBedPrice = $pricingHistory->extra_bed_price ?? 0; $halfChargePrice = $pricingHistory->half_charge_price ?? 0; $halfBoardPrice = $pricingHistory->half_board_price ?? 0; $fullBoardPrice = $pricingHistory->full_board_price ?? 0; // final price is calculated by adding payable price and extra charge $finalPrice = (int) round( $totalRawPrice + $extraPrice + $extraBedPrice + $halfBoardPrice + $halfChargePrice + $fullBoardPrice, 0 ); // Update payable price with the computed final price AccommodationBooking::where('id', $accommodationBookingId)->update(['payable_price' => $finalPrice]); // Add a log in accommodation_booking_accommodation_room try { DB::table('accommodation_booking_accommodation_room') ->insert([ 'accommodation_booking_id' => $accommodationBookingId, 'accommodation_room_id' => $roomId, 'guest_national_number' => $guestNationalID, 'guest_first_name' => $guestName, 'guest_last_name' => $guestLastName, 'guest_cell_phone' => $guestCellPhone, 'guest_nationality_id' => $guestNationality, 'is_deleted' => 0, 'created_at' => Carbon::now(), 'updated_at' => Carbon::now() ]); } catch (\Exception $ex) { Log::error('Error during inserting accommodation_booking_accommodation_room: ' . $ex->getMessage()); return $this->sendError( 'Error during inserting accommodation_booking_accommodation_room', 'Error during inserting accommodation_booking_accommodation_room.' ); } return $this->sendResponse($finalPrice, 'final price retrieved successfully.'); } Although there Are some Tutorials on medium and some other sites about the Repository pattern for laravel iLaravel I read in some sites that repository pattern will duplicate the ORM and You wontwon't need it in laravelLaravel so now iI have 2 questions : is it right to implement Repository pattern in laravelLaravel ?? if yes What is the best source of tutorial because laracast iI think has no tutorial on that netherneither do any good source done any thinganything about it . and finally if not what is the best solution to make controller more beautiful and short
Although there Are some Tutorials on medium and some other sites about the Repository pattern for laravel i read in some sites that repository pattern will duplicate the ORM and You wont need it in laravel so now i have 2 questions : is it right to implement Repository pattern in laravel ?? if yes What is the best source of tutorial because laracast i think has no tutorial on that nether do any good source done any thing about it . and finally if not what is the best solution to make controller more beautiful and short
Although there Are some Tutorials on medium and some other sites about the Repository pattern for Laravel I read in some sites that repository pattern will duplicate the ORM and You won't need it in Laravel so now I have 2 questions: is it right to implement Repository pattern in Laravel ?? if yes What is the best source of tutorial because laracast I think has no tutorial on that neither do any good source done anything about it . and finally if not what is the best solution to make controller more beautiful and short
how to implement Repository Pattern In Laravel
Although there Are some Tutorials on medium and some other sites about the Repository pattern for laravel i read in some sites that repository pattern will duplicate the ORM and You wont need it in laravel so now i have 2 questions : is it right to implement Repository pattern in laravel ?? if yes What is the best source of tutorial because laracast i think has no tutorial on that nether do any good source done any thing about it . and finally if not what is the best solution to make controller more beautiful and short