public function statistics($dateString = null) { // echo('<pre>'); Carbon::setLocale('nl'); //check if valid date $isRightFormat = preg_match('(^[0-9]{4}-[0-9]{2}-[0-9]{2}$)', $dateString); if ($dateString && $isRightFormat && Carbon::createFromFormat('Y-m-d', $dateString) !== false) { $date = Carbon::createFromFormat('Y-m-d h:i:s', $dateString . ' 00:00:00', 'Europe/Brussels'); } else { $date = Carbon::today('Europe/Brussels'); } $clients = Client::where('entertime', '>', $date)->where('entertime', '<', $date->copy()->addDay()); //get number of booked tables $clientSum = $clients->count(); //get total amount of clients $clientAmount = $clients->sum('amount'); //get number of orders $orders = Order::where('starttime', '>', $date)->where('starttime', '<', $date->copy()->addDay()); $ordersCount = $orders->count('id'); $longestTime = $shortestTime = null; $ordersGet = $orders->get(); //get total number of staff members working today $staff = WaiterArea::groupBy('FK_waiter_id')->where('start_time', '>', $date)->where('end_time', '<', $date->copy()->addDay())->get()->count(); //check all orders to set longest and shortest wait time foreach ($ordersGet as $order) { $starttime = Carbon::createFromFormat('Y-m-d H:i:s', $order->starttime); if ($order->endtime) { $endtime = Carbon::createFromFormat('Y-m-d H:i:s', $order->endtime); } else { $endtime = Carbon::now('Europe/Brussels'); } $wait_time = $endtime->diffInSeconds($starttime); //if longesTime or shortestTime is null, set equal to first wait time if ($longestTime == null || $shortestTime == null) { $longestTime = $shortestTime = []; $longestTime['time'] = $shortestTime['time'] = $wait_time; $longestTime['start'] = $shortestTime['start'] = $starttime; $longestTime['end'] = $shortestTime['end'] = $endtime; $longestTime['table'] = $shortestTime['table'] = $order->client->table->number; } //if wait time is longer than old longest time, change longest time if ($wait_time > $longestTime['time']) { $longestTime['time'] = $wait_time; $longestTime['start'] = $starttime; $longestTime['end'] = $endtime; $longestTime['table'] = $order->client->table->number; } //if wait time is shorter than old shortest time, change shortest time if ($wait_time < $shortestTime['time']) { $shortestTime['time'] = $wait_time; $shortestTime['start'] = $starttime; $shortestTime['end'] = $endtime; $shortestTime['table'] = $order->client->table->number; } } //set times readable for humans if (isset($longestTime) && isset($shortestTime)) { $longestTime['time'] = $longestTime['end']->diffForHumans($longestTime['start'], true); $shortestTime['time'] = $shortestTime['end']->diffForHumans($shortestTime['start'], true); } $clientsHour = []; //make graph $clientsHour = $this->dayGraph($date, $clients->get()); $data = []; $data['date'] = $date->toDateString(); $data['clientSum'] = $clientSum; $data['clientAmount'] = $clientAmount; $data['orders'] = $ordersCount; $data['shortestTime'] = $shortestTime; $data['longestTime'] = $longestTime; $data['clientsHour'] = $clientsHour; $data['staff'] = $staff; return View('statistic')->with($data); }
/** * Update the specified resource in storage. * * @param int $id * @return Response */ public function update(Request $request, $id) { $validator = $this->validator($request->all()); if ($validator->fails()) { return redirect()->back()->withErrors($validator); } $start_time = Carbon::today(); $end_time = Carbon::today(); $start_time->hour = substr($request->input('start_time'), 0, 2); $start_time->minute = substr($request->input('start_time'), 3, 2); $end_time->hour = substr($request->input('end_time'), 0, 2); $end_time->minute = substr($request->input('end_time'), 3, 2); $waiterArea = WaiterArea::findorfail($id); $waiterArea->FK_area_id = $request->input('area'); $waiterArea->start_time = $start_time; $waiterArea->end_time = $end_time; $waiterArea->save(); return redirect()->back(); }