Feat: Компромиссное редактирование назначений

 Проверка на начатые тесты перед редактированием
 Если тестов нет — можно менять курс и дату начала
 Если тесты есть — только дата окончания и заметка
 Предупреждение в modal

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
This commit is contained in:
mirivlad
2026-03-31 09:41:02 +08:00
co-authored by Qwen-Coder
parent 7da4b1a2cf
commit 95046fa59e
2 changed files with 71 additions and 1 deletions
@@ -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)