siakad-itm/app/Services/Admin/AcademicClasses/SubmissionService.php
Yoga Pangestu c74a7c7792
Some checks failed
tests / ci (pull_request) Has been cancelled
feat: add academic advising logs and letter requests management
- Implemented academic advising logs functionality with create, edit, and delete capabilities.
- Created UI components for displaying academic advising logs in a data table format.
- Added letter requests management with similar CRUD operations and UI components.
- Refactored routes to organize academic classes, announcements, finances, and services under appropriate namespaces.
2026-08-25 23:05:19 +07:00

69 lines
2.2 KiB
PHP

<?php
namespace App\Services\Admin\AcademicClasses;
use App\Models\Assignment;
use App\Models\Student;
use App\Models\Submission;
use Illuminate\Database\Eloquent\Collection;
use Illuminate\Http\UploadedFile;
class SubmissionService
{
public function forAssignment(Assignment $assignment): Collection
{
return $assignment->submissions()
->with(['student.user.profile', 'student.department'])
->latest('created_at')
->get();
}
public function availableStudents(Assignment $assignment): Collection
{
return Student::query()
->whereHas('enrollments', fn ($q) => $q->where('course_class_id', $assignment->course_class_id))
->whereDoesntHave('submissions', fn ($q) => $q->where('assignment_id', $assignment->id))
->with(['user.profile', 'department'])
->get();
}
public function create(Assignment $assignment, array $data, ?UploadedFile $file): Submission
{
$submission = $assignment->submissions()->create([
'student_id' => $data['student_id'],
'notes' => $data['notes'] ?? null,
'status' => $data['status'],
'submitted_at' => $data['submitted_at'] ?? null,
'score' => $data['score'] ?? null,
'lecturer_feedback' => $data['lecturer_feedback'] ?? null,
]);
if ($file) {
$submission->addMedia($file)->toMediaCollection('submission_file');
}
return $submission;
}
public function update(Submission $submission, array $data, ?UploadedFile $file): Submission
{
$submission->notes = $data['notes'] ?? null;
$submission->status = $data['status'];
$submission->submitted_at = $data['submitted_at'] ?? null;
$submission->score = $data['score'] ?? null;
$submission->lecturer_feedback = $data['lecturer_feedback'] ?? null;
$submission->update();
if ($file) {
$submission->addMedia($file)->toMediaCollection('submission_file');
}
return $submission;
}
public function delete(Submission $submission): bool
{
return $submission->delete();
}
}