/**
  * This function is used to load the room modal contents.This function response to
  *a ajax call.
  *
  * @param Request $request
  * @return \Illuminate\Http\JsonResponse
  */
 public function roomViewLoad(Request $request)
 {
     $inputs = $request::all();
     $room_id = $inputs['room_id'];
     $image1 = ROOM_IMAGE::where('room_type_id', '=', $room_id)->first();
     if (!empty($image1)) {
         $images = ROOM_IMAGE::where('room_type_id', '=', $room_id)->where('path', '!=', $image1->path)->select('path')->get();
         $path = $image1->path;
     } else {
         $images = array();
         $path = null;
     }
     $room_furnishes = RoomTypeFurnish::where('room_type_id', '=', $room_id)->join('ROOM_FURNISHING', 'ROOM_TYPE_FURNISH.furnish_id', '=', 'ROOM_FURNISHING.rf_id')->select('name')->get();
     $room_services = RoomTypeService::where('room_type_id', '=', $room_id)->join('ROOM_SERVICES', 'ROOM_TYPE_SERVICE.service_id', '=', 'ROOM_SERVICES.rs_id')->select('name')->get();
     $room_rates = RATE::join('MEAL_TYPES', 'RATES.meal_type_id', '=', 'MEAL_TYPES.meal_type_id')->where('RATES.room_type_id', '=', $room_id)->select('MEAL_TYPES.meal_type_name', 'RATES.rate_code', 'RATES.single_rates')->get();
     $arr_dep_time = DB::table('HOTEL_INFO')->select('check_in', 'check_out')->first();
     if (!empty($arr_dep_time)) {
         $checkin = $arr_dep_time->check_in;
         $checkout = $arr_dep_time->check_out;
     } else {
         $checkin = null;
         $checkout = null;
     }
     return response()->json(['rimage1' => $path, 'rimages' => $images, 'room_furnishes' => $room_furnishes, 'room_services' => $room_services, 'room_rates' => $room_rates, 'check_in' => $checkin, 'check_out' => $checkout]);
 }
 /**
  * This function rooms selected for the reservation to the session.
  *
  * @param Request $request
  * @return \Illuminate\Http\JsonResponse
  */
 public function addSelectedRooms(Request $request)
 {
     $inputs = $request::all();
     //get the selected rooms details and store it to variables
     $room_type_id = $inputs['room_type_id'];
     $room_type_name = $inputs['room_type_name'];
     $no_of_rooms = $inputs['no_of_rooms'];
     $rate_code = $inputs[$room_type_id . 'rate_code'];
     $rate_price = RATE::where('rate_code', '=', $rate_code)->value('single_rates');
     //get the early rate if the selected room is already in the session
     $early_rate_price = 0;
     $meal_type_name = RATE::join('MEAL_TYPES', 'RATES.meal_type_id', '=', 'MEAL_TYPES.meal_type_id')->where('RATES.rate_code', '=', $rate_code)->value('meal_type_name');
     //this variable is to identify whether the selected room type already added in the session previously
     $session_have = config('constants.CHK_ZERO');
     //check whether session has the room type added already
     if (Session::has('room_types')) {
         foreach (session('room_types') as $room_type) {
             if ($room_type == $room_type_id) {
                 $session_have = config('constants.SESSION_HAVE');
                 $early_rate_price = RATE::where('rate_code', '=', session('rate_code' . $room_type_id))->value('single_rates');
             }
         }
     }
     //store the total payable amount from the session to a variable
     $total_payable = config('constants.CHK_ZERO');
     if (Session::has('total_payable')) {
         $total_payable = session('total_payable');
     }
     //if the room type is already in the session update that session by replacing it
     if ($session_have == config('constants.SESSION_HAVE')) {
         $total_payable = $total_payable - $early_rate_price * session('no_of_rooms' . $room_type_id) + $rate_price * $no_of_rooms;
         Session::put(['no_of_rooms' . $room_type_id => $no_of_rooms, 'rate_code' . $room_type_id => $rate_code, 'rate' . $room_type_id => $rate_price]);
         Session::put(['meal_type' . $room_type_id => $meal_type_name, 'meal_type' . $room_type_id => $meal_type_name, 'total_payable' => $total_payable]);
     } else {
         //if the room type is not available push the selected room type details to the session
         $total_payable += $rate_price * $no_of_rooms;
         Session::push('room_types', $room_type_id);
         Session::put(['no_of_rooms' . $room_type_id => $no_of_rooms, 'room_type_name' . $room_type_id => $room_type_name, 'rate_code' . $room_type_id => $rate_code]);
         Session::put(['rate' . $room_type_id => $rate_price, 'meal_type' . $room_type_id => $meal_type_name, 'total_payable' => $total_payable]);
     }
     //create arrays to store the session details to respond to a ajax request, this was done because without
     // refreshing the pages session values wont be updated in the views
     $room_types = array();
     $number_rooms = array();
     $rates = array();
     $meal = array();
     $room_type_ids = array();
     //push the values to the array
     foreach (session('room_types') as $room_type) {
         array_push($room_type_ids, $room_type);
         array_push($room_types, session('room_type_name' . $room_type));
         array_push($number_rooms, session('no_of_rooms' . $room_type));
         array_push($rates, session('rate' . $room_type));
         array_push($meal, session('meal_type' . $room_type));
     }
     return response()->json(['ids' => $room_type_ids, 'room_types' => $room_types, 'no_of_rooms' => $number_rooms, 'rates' => $rates, 'meals' => $meal]);
 }