'reports', 'title' => 'Отчёты', 'id' => 'reports', ]; public function index(Request $request) { $this->data['weekNumber'] = $request->get('week' ,date('W')); $weekDates = [ 'mon' => DateHelper::getDateOfWeek(year(), $this->data['weekNumber']), 'tue' => DateHelper::getDateOfWeek(year(), $this->data['weekNumber'], 2), 'wed' => DateHelper::getDateOfWeek(year(), $this->data['weekNumber'], 3), 'thu' => DateHelper::getDateOfWeek(year(), $this->data['weekNumber'], 4), 'fri' => DateHelper::getDateOfWeek(year(), $this->data['weekNumber'], 5), 'sat' => DateHelper::getDateOfWeek(year(), $this->data['weekNumber'], 6), 'sun' => DateHelper::getDateOfWeek(year(), $this->data['weekNumber'], 7), ]; $this->data['weekDates'] = $weekDates; $maxInstallDays = Order::query()->max('install_days'); $from = date('Y-m-d', strtotime($weekDates['mon']) - $maxInstallDays * 86400); $orders = Order::query() ->whereNotNull('installation_date') ->whereNotNull('brigadier_id') ->whereBetween('installation_date', [$from , $weekDates['sun'] ]) ->where('order_status_id', 5) ->orderBy('installation_date') ->orderBy('brigadier_id') ->get(); $schedules = []; foreach ($weekDates as $wd) $schedules[$wd] = null; foreach ($orders as $order) { for ($iDays = 1; $iDays < $order->install_days + 1; $iDays++) { $instDate = date('Y-m-d', strtotime('+' . $iDays - 1 . ' days', strtotime($order->installation_date))); if(in_array($instDate, $weekDates)) { $schedules[$instDate][] = $order; } } } $this->data['schedules'] = $schedules; return view('schedule.index', $this->data); } }