'schedule', 'title' => 'График монтажей', 'id' => 'schedule', ]; public function index(Request $request) { $this->data['districts'] = District::query()->get()->pluck('name', 'id'); $this->data['areas'] = Area::query()->get()->pluck('name', 'id'); $this->data['brigadiers'] = User::query()->where('role', Role::BRIGADIER)->get()->pluck('name', 'id'); $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; $schedules = []; foreach ($weekDates as $date) { $schedules[$date] = null; } $result = Schedule::query() ->whereBetween('installation_date', [$weekDates['mon'], $weekDates['sun']]) ->get(); foreach ($result as $schedule) { $schedules[$schedule->installation_date][] = $schedule; } $this->data['schedules'] = $schedules; return view('schedule.index', $this->data); } public function createFromOrder(CreateScheduleFromOrderRequest $request) { $validated = $request->validated(); // delete all auto schedules for this order if(isset($validated['delete_old_records'])) { Schedule::query() ->where('order_id', $validated['order_id']) ->where('source', 'Площадки') ->where('manual', false) ->delete(); } // create all records in schedule $order = Order::query() ->where('id', $validated['order_id']) ->first(); if(empty($validated['skus'])) { foreach ($order->products_sku as $psku) $validated['skus'][] = $psku->id; } $mafs = []; foreach ($validated['skus'] as $skuId) { $sku = ProductSKU::query()->where('id', $skuId)->first(); if(!isset($mafs[$sku->product->article])) { $mafs[$sku->product->article] = 1; } else { $mafs[$sku->product->article] += 1; } } $mafsText = ''; $mafsCount = 0; foreach ($mafs as $article => $count) { $mafsText .= $article . ' - ' . $count . "\r\n"; $mafsCount += $count; } for ($iDays = 1; $iDays < $order->install_days + 1; $iDays++) { $instDate = date('Y-m-d', strtotime('+' . $iDays - 1 . ' days', strtotime($order->installation_date))); Schedule::query() ->create([ 'order_id' => $validated['order_id'], 'address_code' => $validated['order_id'], 'source' => 'Площадки', 'installation_date' => $instDate, 'manual' => false, 'district_id' => $order->district_id, 'area_id' => $order->area_id, 'object_address' => $order->object_address, 'object_type' => $order->objectType->name, 'mafs' => $mafsText, 'mafs_count' => $mafsCount, 'brigadier_id' => $order->brigadier_id, 'comment' => $validated['comment'], ]); } return redirect()->route('schedule.index'); } public function createFromReclamation(CreateScheduleFromReclamationRequest $request) { $validated = $request->validated(); // delete all auto schedules for this order if(isset($validated['delete_old_records'])) { Schedule::query() ->where('address_code', 'РЕКЛ-' . $validated['reclamation_id']) ->where('source', 'Рекламации') ->where('manual', false) ->delete(); } $reclamation = Reclamation::query() ->where('id', $validated['reclamation_id']) ->first(); $order = $reclamation->order; $mafs = []; if(empty($validated['skus'])) { foreach ($reclamation->skus as $sku) if(!isset($mafs[$sku->product->article])) { $mafs[$sku->product->article] = 1; } else { $mafs[$sku->product->article] += 1; } } $mafsCount = 0; $mafsText = ''; foreach ($mafs as $article => $count) { $mafsCount += $count; $mafsText .= $article . ' - ' . $count . "\r\n"; } for ($iDays = 1; $iDays < $reclamation->work_days + 1; $iDays++) { $instDate = date('Y-m-d', strtotime('+' . $iDays - 1 . ' days', strtotime($reclamation->start_work_date))); Schedule::query() ->create([ 'order_id' => $order->id, 'address_code' => 'РЕКЛ-' . $validated['reclamation_id'], 'source' => 'Рекламации', 'installation_date' => $instDate, 'manual' => false, 'district_id' => $order->district_id, 'area_id' => $order->area_id, 'object_address' => $order->object_address, 'object_type' => $reclamation->reason, 'mafs' => $mafsText, 'mafs_count' => $mafsCount, 'brigadier_id' => $reclamation->brigadier_id, 'comment' => $reclamation->guarantee, ]); } return redirect()->route('schedule.index'); } public function update(UpdateScheduleRequest $request) { $validated = $request->validated(); if(isset($validated['id'])) { Schedule::query() ->where('id', $validated['id']) ->update($validated); } else { Schedule::query() ->create([ 'address_code' => $validated['address_code'] ?? '-', 'installation_date' => $validated['installation_date'], 'manual' => true, 'district_id' => $validated['district_id'], 'area_id' => $validated['area_id'], 'object_address' => $validated['object_address'], 'object_type' => $validated['object_type'], 'mafs' => $validated['mafs'], 'mafs_count' => $validated['mafs_count'], 'brigadier_id' => $validated['brigadier_id'], 'comment' => $validated['comment'], ]); } return redirect()->back(); } public function delete(Schedule $schedule) { $schedule->delete(); return redirect()->back(); } }