/** * Process and generate data could be accepted by * {@link http://www.highcharts.com/ Charts} * for a given year. * * @param $year * @return \Illuminate\View\View */ public function chart($year) { $dt = Carbon::createFromDate($year, 1, 1); $dt_diff = Carbon::createFromDate($year, 1, 1)->endOfYear(); $reservations = Reservation::whereBetween('arrive_at', [$dt, $dt_diff])->where('is_valid', true)->get(); $tmp = []; foreach ($reservations as $reservation) { $arrive_at = Carbon::parse($reservation->arrive_at); $leave_at = Carbon::parse($reservation->leave_at); while ($arrive_at->lte($leave_at)) { $month = $this->months[$arrive_at->month - 1]; if (empty($tmp[$arrive_at->month][$arrive_at->day])) { $tmp[$arrive_at->month][$arrive_at->day] = 0; } $tmp[$arrive_at->month][$arrive_at->day] += $reservation->nb_people; $arrive_at->addDay(); } } $monthly = ['categories' => [], 'data' => []]; $daily = []; foreach ($tmp as $month => $list) { foreach ($list as $day => $nb) { $daily[$month]['categories'][] = $day; $daily[$month]['data'][] = round($nb / self::$MAX * 100); } $monthly['categories'][] = $month; $monthly['data'][] = round(max($list) / self::$MAX * 100); } ksort($daily); foreach ($daily as $month => $value) { asort($value['categories']); $keys = array_keys($value['categories']); $tmp = []; foreach ($keys as $i => $key) { $tmp[$i] = $value['data'][$key]; } $value['data'] = $tmp; $value['categories'] = array_values($value['categories']); $daily[$month] = $value; } asort($monthly['categories']); $keys = array_keys($monthly['categories']); $tmp = []; foreach ($keys as $i => $key) { $tmp[$i] = $monthly['data'][$key]; } $monthly['data'] = $tmp; $monthly['categories'] = array_values($monthly['categories']); $months = $this->months; return view('stats.chart', compact('year', 'monthly', 'daily', 'months')); }
/** * Check available rooms * * @return array */ public function checkAvailability(Request $request) { //add params start_date, end_date //Start date_input $input = $request->all(); $currentOccupants = []; $rooms = Room::all(); $check_date = Reservation::whereBetween('start_date', [$input['start_date'], $input['end_date']])->get(); foreach ($rooms as $index => $room) { # code... $currentOccupants[$index] = Reservation::where('room_id', $room->id)->where('status', 'accepted')->where('start_date', '<=', [$input['start_date']])->where('end_date', '>=', [$input['end_date']])->count(); } // //EOF date_input //display all_table $all_table = Room::where('availability', 'vacant')->get(); // return view('welcome')->with('table',$table); return view('welcome')->with(compact('check_date', 'input', 'all_table', 'currentOccupants')); }
/** * List of Reservation in date given. * * @param $year * @param $month * @param $day * @return \Illuminate\View\View */ private function day($year, $month, $day) { $dt = Carbon::createFromDate($year, 1, 1); $dt_diff = Carbon::createFromDate($year, 1, 1)->endOfYear(); $reservations = Reservation::whereBetween('arrive_at', [$dt, $dt_diff])->get(); $tmp = []; foreach ($reservations as $reservation) { if ($reservation->is_valid) { $reservation->arrive_at = Carbon::parse($reservation->arrive_at); $reservation->leave_at = Carbon::parse($reservation->leave_at); $tmp[] = $reservation; } } $reservations = $tmp; $dt = Carbon::createFromDate($year, $month, $day); $isTaken = []; if (count($reservations) > 0) { foreach ($reservations as $reservation) { $arrive_at = $reservation->arrive_at; $leave_at = $reservation->leave_at; if ($dt->between($arrive_at, $leave_at->addDay(), true)) { $isTaken[] = $reservation; } } } $monthLitt = $this->months[$month - 1]; $months = $this->months; return view('calendar.day', compact('month', 'months', 'monthLitt', 'year', 'day', 'isTaken')); }