From 95046fa59eb1f2b437777c0daa2e584d14d57061 Mon Sep 17 00:00:00 2001 From: mirivlad Date: Tue, 31 Mar 2026 09:41:02 +0800 Subject: [PATCH] =?UTF-8?q?Feat:=20=D0=9A=D0=BE=D0=BC=D0=BF=D1=80=D0=BE?= =?UTF-8?q?=D0=BC=D0=B8=D1=81=D1=81=D0=BD=D0=BE=D0=B5=20=D1=80=D0=B5=D0=B4?= =?UTF-8?q?=D0=B0=D0=BA=D1=82=D0=B8=D1=80=D0=BE=D0=B2=D0=B0=D0=BD=D0=B8?= =?UTF-8?q?=D0=B5=20=D0=BD=D0=B0=D0=B7=D0=BD=D0=B0=D1=87=D0=B5=D0=BD=D0=B8?= =?UTF-8?q?=D0=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ✅ Проверка на начатые тесты перед редактированием ✅ Если тестов нет — можно менять курс и дату начала ✅ Если тесты есть — только дата окончания и заметка ✅ Предупреждение в modal Co-authored-by: Qwen-Coder --- .../Admin/CourseAssignmentController.php | 38 ++++++++++++++++++- .../admin/course-assignments/show.blade.php | 34 +++++++++++++++++ 2 files changed, 71 insertions(+), 1 deletion(-) diff --git a/app/Http/Controllers/Admin/CourseAssignmentController.php b/app/Http/Controllers/Admin/CourseAssignmentController.php index ef716c2..9fd49c1 100755 --- a/app/Http/Controllers/Admin/CourseAssignmentController.php +++ b/app/Http/Controllers/Admin/CourseAssignmentController.php @@ -69,11 +69,32 @@ class CourseAssignmentController extends Controller 'end_date' => 'nullable|date|after:start_date', 'note' => 'nullable|string', 'is_active' => 'boolean', + 'assignment_ids' => 'nullable|string', // Для обновления существующих ]); $validated['created_by'] = auth()->id(); $validated['is_active'] = $request->boolean('is_active'); + // Если это обновление существующих назначений + if (!empty($validated['assignment_ids'])) { + $assignmentIds = array_map('intval', array_filter(explode(',', $validated['assignment_ids']))); + + CourseAssignment::whereIn('id', $assignmentIds)->update([ + 'course_id' => !empty($validated['course_ids']) + ? explode(',', $validated['course_ids'])[0] + : null, + 'start_date' => $validated['start_date'], + 'end_date' => $validated['end_date'] ?? null, + 'note' => $validated['note'] ?? null, + ]); + + if ($request->ajax()) { + return response()->json(['success' => true, 'message' => 'Обновлено']); + } + + return redirect()->back()->with('success', 'Назначение обновлено'); + } + // Определяем тип назначения по выбранным элементам if (empty($validated['type'])) { if (!empty($validated['user_ids'])) { @@ -187,12 +208,27 @@ class CourseAssignmentController extends Controller $assignments = $query->with(['course', 'user', 'group', 'organization', 'creator'])->get(); $courseModel = $assignments->first()?->course ?? Course::find($course); + // Проверяем можно ли редактировать (нет ли начатых тестов) + $canEditCourse = true; + $assignmentIds = $assignments->pluck('id')->toArray(); + + // Проверяем есть ли начатые тесты у назначений + if (!empty($assignmentIds)) { + // Проверяем через тесты и результаты + $hasStartedTests = \DB::table('test_results') + ->whereIn('assignment_id', $assignmentIds) + ->whereNotNull('started_at') + ->exists(); + + $canEditCourse = !$hasStartedTests; + } + // Группируем по типам $individual = $assignments->where('type', 'individual'); $groups = $assignments->where('type', 'group'); $organizations = $assignments->where('type', 'organization'); - return view('admin.course-assignments.show', compact('courseModel', 'assignments', 'individual', 'groups', 'organizations', 'start_date', 'end_date')); + return view('admin.course-assignments.show', compact('courseModel', 'assignments', 'individual', 'groups', 'organizations', 'start_date', 'end_date', 'canEditCourse')); } public function destroy(CourseAssignment $course_assignment) diff --git a/resources/views/admin/course-assignments/show.blade.php b/resources/views/admin/course-assignments/show.blade.php index edc39a9..b1d6285 100644 --- a/resources/views/admin/course-assignments/show.blade.php +++ b/resources/views/admin/course-assignments/show.blade.php @@ -219,6 +219,7 @@