commit
38d381b388
@ -7,6 +7,7 @@ use App\Models\Assessment;
|
||||
use App\Models\ClassRoom;
|
||||
use App\Models\ClassStudent;
|
||||
use App\Models\ClassSubject;
|
||||
use App\Models\HomeRoomTeacher;
|
||||
use App\Models\Student;
|
||||
use App\Models\Subject;
|
||||
use App\Models\TeacherSubject;
|
||||
@ -32,12 +33,26 @@ class StudentReport extends Page
|
||||
|
||||
public static function canAccess(): bool
|
||||
{
|
||||
return auth()->user()->hasAnyRole(['super_admin']);
|
||||
$user = auth()->user();
|
||||
$isTeacher = false;
|
||||
$homeRoomTeacher = HomeRoomTeacher::where('teacher_id', $user->id)->first();
|
||||
if ($homeRoomTeacher) {
|
||||
$isTeacher = true;
|
||||
}
|
||||
|
||||
return auth()->user()->hasAnyRole(['super_admin']) || auth()->user()->hasAnyRole(['headmaster']) || $isTeacher;
|
||||
}
|
||||
|
||||
public static function shouldRegisterNavigation(): bool
|
||||
{
|
||||
return auth()->user()->hasAnyRole(['super_admin']);
|
||||
$user = auth()->user();
|
||||
$isTeacher = false;
|
||||
$homeRoomTeacher = HomeRoomTeacher::where('teacher_id', $user->id)->first();
|
||||
if ($homeRoomTeacher) {
|
||||
$isTeacher = true;
|
||||
}
|
||||
|
||||
return auth()->user()->hasAnyRole(['super_admin']) || auth()->user()->hasAnyRole(['headmaster']) || $isTeacher;
|
||||
}
|
||||
|
||||
public function mount(): void
|
||||
@ -51,12 +66,36 @@ class StudentReport extends Page
|
||||
public function form(Form $form): Form
|
||||
{
|
||||
return $form->schema([
|
||||
// Select::make('class_id')
|
||||
// ->label('Class')
|
||||
// ->required()
|
||||
// ->options(ClassRoom::pluck('class_name', 'id')->toArray())
|
||||
// ->searchable()
|
||||
// ->reactive()
|
||||
// ->afterStateUpdated(function ($state) {
|
||||
// $this->class_id = $state;
|
||||
// $this->data['class_id'] = $state; // Update data array
|
||||
// $this->loadData();
|
||||
// }),
|
||||
Select::make('class_id')
|
||||
->label('Class')
|
||||
->required()
|
||||
->options(ClassRoom::pluck('class_name', 'id')->toArray())
|
||||
->options(function () {
|
||||
$query = ClassRoom::query();
|
||||
|
||||
$user = auth()->user();
|
||||
|
||||
if ($user->hasAnyRole(['teacher'])) {
|
||||
$homeRoomTeacher = HomeRoomTeacher::where('teacher_id', $user->id)->first();
|
||||
if ($homeRoomTeacher) {
|
||||
$query->where('id', $homeRoomTeacher->class_room_id);
|
||||
}
|
||||
}
|
||||
|
||||
return $query->pluck('class_name', 'id')->toArray();
|
||||
})
|
||||
->searchable()
|
||||
->reactive()
|
||||
->native(false)
|
||||
->afterStateUpdated(function ($state) {
|
||||
$this->class_id = $state;
|
||||
$this->data['class_id'] = $state; // Update data array
|
||||
|
||||
@ -7,6 +7,7 @@ use App\Filament\Resources\AcademicYearResource\RelationManagers;
|
||||
use App\Models\AcademicYear;
|
||||
use Filament\Forms;
|
||||
use Filament\Forms\Form;
|
||||
use Filament\Notifications\Notification;
|
||||
use Filament\Resources\Resource;
|
||||
use Filament\Tables;
|
||||
use Filament\Tables\Table;
|
||||
@ -41,7 +42,9 @@ class AcademicYearResource extends Resource
|
||||
return $table
|
||||
->columns([
|
||||
Tables\Columns\TextColumn::make('name')
|
||||
->searchable(),
|
||||
->searchable()
|
||||
->weight(fn (AcademicYear $record) => $record->is_active ? 'bold' : 'normal')
|
||||
->color(fn (AcademicYear $record) => $record->is_active ? 'success' : null),
|
||||
Tables\Columns\IconColumn::make('is_active')
|
||||
->boolean(),
|
||||
Tables\Columns\TextColumn::make('start_date')
|
||||
@ -68,6 +71,22 @@ class AcademicYearResource extends Resource
|
||||
])
|
||||
->actions([
|
||||
Tables\Actions\EditAction::make(),
|
||||
Tables\Actions\Action::make('toggleActive')
|
||||
->label('Toggle Active')
|
||||
->icon('heroicon-o-power')
|
||||
->action(function (AcademicYear $record) {
|
||||
// If setting to active, deactivate all others
|
||||
if ($record->is_active) {
|
||||
Notification::make()
|
||||
->title('Info')
|
||||
->body('The school year is active')
|
||||
->info()
|
||||
->send();
|
||||
} else {
|
||||
AcademicYear::where('is_active', true)->update(['is_active' => false]);
|
||||
$record->update(['is_active' => true]);
|
||||
}
|
||||
}),
|
||||
])
|
||||
->bulkActions([
|
||||
Tables\Actions\BulkActionGroup::make([
|
||||
|
||||
@ -7,9 +7,11 @@ use App\Filament\Resources\AssessmentResource\RelationManagers;
|
||||
use App\Models\Assessment;
|
||||
use App\Models\AssessmentComponent;
|
||||
use App\Models\ClassStudent;
|
||||
use App\Models\HomeRoomTeacher;
|
||||
use App\Models\Student;
|
||||
use App\Models\TeacherSubject;
|
||||
use Filament\Forms;
|
||||
use Filament\Forms\Components\Select;
|
||||
use Filament\Forms\Form;
|
||||
use Filament\Resources\Resource;
|
||||
use Filament\Tables;
|
||||
@ -29,14 +31,56 @@ class AssessmentResource extends Resource
|
||||
{
|
||||
return $form
|
||||
->schema([
|
||||
Forms\Components\Select::make('teacher_subject_id')
|
||||
// Forms\Components\Select::make('teacher_subject_id')
|
||||
// ->label('Teacher Subject')
|
||||
// ->required()
|
||||
// ->relationship('teacherSubject', 'id')
|
||||
// ->getOptionLabelFromRecordUsing(fn (TeacherSubject $record) =>
|
||||
// $record->teacher->name . ' - ' . $record->subject->name . ' - ' . $record->class->class_name . ' - ' . $record->academicYear->name)
|
||||
// ->searchable()
|
||||
// ->preload()
|
||||
// ->afterStateUpdated(function (callable $set, $state) {
|
||||
// if ($state) {
|
||||
// $teacherSubject = TeacherSubject::find($state);
|
||||
// if ($teacherSubject) {
|
||||
// $set('student_id', null);
|
||||
// }
|
||||
// }
|
||||
// })
|
||||
// ->required(),
|
||||
|
||||
Select::make('teacher_subject_id')
|
||||
->label('Teacher Subject')
|
||||
->required()
|
||||
->relationship('teacherSubject', 'id')
|
||||
->getOptionLabelFromRecordUsing(fn (TeacherSubject $record) =>
|
||||
$record->teacher->name . ' - ' . $record->subject->name . ' - ' . $record->class->class_name . ' - ' . $record->academicYear->name)
|
||||
->options(function () {
|
||||
$user = auth()->user();
|
||||
$query = TeacherSubject::with(['teacher', 'subject', 'class', 'academicYear']);
|
||||
|
||||
if ($user->hasRole('teacher')) {
|
||||
// Ambil ID kelas dimana user menjadi wali kelas
|
||||
$homeRoomClassIds = HomeRoomTeacher::where('teacher_id', $user->id)
|
||||
->pluck('class_room_id')
|
||||
->toArray();
|
||||
|
||||
$query->where(function($q) use ($user, $homeRoomClassIds) {
|
||||
// Mata pelajaran yang diajarkan oleh guru ini
|
||||
$q->where('teacher_id', $user->id)
|
||||
// ATAU kelas dimana dia menjadi wali kelas
|
||||
->orWhereIn('class_id', $homeRoomClassIds);
|
||||
});
|
||||
}
|
||||
|
||||
return $query->get()->mapWithKeys(fn ($item) => [
|
||||
$item->id => sprintf('%s - %s - %s - %s',
|
||||
$item->teacher->name,
|
||||
$item->subject->name,
|
||||
$item->class->class_name,
|
||||
$item->academicYear->name
|
||||
)
|
||||
]);
|
||||
})
|
||||
->searchable()
|
||||
->preload()
|
||||
->live()
|
||||
->afterStateUpdated(function (callable $set, $state) {
|
||||
if ($state) {
|
||||
$teacherSubject = TeacherSubject::find($state);
|
||||
@ -44,8 +88,7 @@ class AssessmentResource extends Resource
|
||||
$set('student_id', null);
|
||||
}
|
||||
}
|
||||
})
|
||||
->required(),
|
||||
}),
|
||||
|
||||
Forms\Components\Select::make('student_id')
|
||||
->label('Student')
|
||||
@ -128,7 +171,7 @@ class AssessmentResource extends Resource
|
||||
])
|
||||
->bulkActions([
|
||||
Tables\Actions\BulkActionGroup::make([
|
||||
Tables\Actions\DeleteBulkAction::make(),
|
||||
Tables\Actions\DeleteBulkAction::make()->visible(fn () => auth()->user()->hasRole('super_admin') || auth()->user()->hasRole('teacher')),
|
||||
]),
|
||||
])
|
||||
->emptyStateActions([
|
||||
|
||||
@ -3,21 +3,43 @@
|
||||
namespace App\Filament\Resources\AssessmentResource\Pages;
|
||||
|
||||
use App\Filament\Resources\AssessmentResource;
|
||||
use App\Models\Assessment;
|
||||
use App\Models\HomeRoomTeacher;
|
||||
use Filament\Actions;
|
||||
use Filament\Resources\Pages\ListRecords;
|
||||
use Illuminate\Database\Eloquent\Builder;
|
||||
|
||||
class ListAssessments extends ListRecords
|
||||
{
|
||||
protected static string $resource = AssessmentResource::class;
|
||||
|
||||
protected function getTableQuery(): Builder
|
||||
{
|
||||
$user = auth()->user();
|
||||
|
||||
if ($user->hasRole('teacher')) {
|
||||
$homeRoomClassIds = HomeRoomTeacher::where('teacher_id', $user->id)
|
||||
->pluck('class_room_id')
|
||||
->toArray();
|
||||
return Assessment::with('teacherSubject', 'student')
|
||||
->whereHas('teacherSubject', function (Builder $query) use ($homeRoomClassIds, $user) {
|
||||
$query->where('teacher_id', $user->id)
|
||||
->orWhereIn('class_id', $homeRoomClassIds);
|
||||
});
|
||||
}
|
||||
|
||||
return Assessment::query();
|
||||
}
|
||||
|
||||
protected function getHeaderActions(): array
|
||||
{
|
||||
return [
|
||||
Actions\CreateAction::make(),
|
||||
Actions\CreateAction::make()->visible(fn () => auth()->user()->hasRole('super_admin')),
|
||||
Actions\Action::make('multiple')
|
||||
->label('Multiple Assessments')
|
||||
->url('assessments/multiple')
|
||||
->icon('heroicon-o-user-group'),
|
||||
->icon('heroicon-o-user-group')
|
||||
->visible(fn () => auth()->user()->hasRole('super_admin') || auth()->user()->hasRole('teacher')),
|
||||
];
|
||||
}
|
||||
}
|
||||
|
||||
@ -6,6 +6,7 @@ use App\Filament\Resources\AssessmentResource;
|
||||
use App\Models\Assessment;
|
||||
use App\Models\Attendances;
|
||||
use App\Models\ClassStudent;
|
||||
use App\Models\HomeRoomTeacher;
|
||||
use Filament\Actions;
|
||||
use Filament\Forms\Components\Select;
|
||||
use Filament\Resources\Pages\page;
|
||||
@ -43,17 +44,51 @@ class MultipleAssessments extends page
|
||||
return [
|
||||
Forms\Components\Grid::make(2)
|
||||
->schema([
|
||||
Forms\Components\Select::make('teacherSubjectId')
|
||||
// Forms\Components\Select::make('teacherSubjectId')
|
||||
// ->label('Teacher Subject')
|
||||
// ->options(
|
||||
// TeacherSubject::with(['teacher', 'subject', 'class', 'academicYear'])->get()->mapWithKeys(function ($item) {
|
||||
// return [
|
||||
// $item->id => "{$item->teacher->name} - {$item->subject->name} - {$item->class->class_name} - {$item->academicYear->name}"
|
||||
// ];
|
||||
// })->toArray()
|
||||
// )
|
||||
// ->searchable()
|
||||
// ->reactive()
|
||||
// ->afterStateUpdated(function ($state) {
|
||||
// $this->teacherSubjectId = $state;
|
||||
// $this->loadStudents();
|
||||
// }),
|
||||
|
||||
Select::make('teacherSubjectId')
|
||||
->label('Teacher Subject')
|
||||
->options(
|
||||
TeacherSubject::with(['teacher', 'subject', 'class', 'academicYear'])->get()->mapWithKeys(function ($item) {
|
||||
return [
|
||||
$item->id => "{$item->teacher->name} - {$item->subject->name} - {$item->class->class_name} - {$item->academicYear->name}"
|
||||
];
|
||||
})->toArray()
|
||||
)
|
||||
->required()
|
||||
->options(function () {
|
||||
$user = auth()->user();
|
||||
$query = TeacherSubject::with(['teacher', 'subject', 'class', 'academicYear']);
|
||||
|
||||
if ($user->hasRole('teacher')) {
|
||||
$homeRoomClassIds = HomeRoomTeacher::where('teacher_id', $user->id)
|
||||
->pluck('class_room_id')
|
||||
->toArray();
|
||||
|
||||
$query->where(function($q) use ($user, $homeRoomClassIds) {
|
||||
$q->where('teacher_id', $user->id)
|
||||
->orWhereIn('class_id', $homeRoomClassIds);
|
||||
});
|
||||
}
|
||||
|
||||
return $query->get()->mapWithKeys(fn ($item) => [
|
||||
$item->id => sprintf('%s - %s - %s - %s',
|
||||
$item->teacher->name,
|
||||
$item->subject->name,
|
||||
$item->class->class_name,
|
||||
$item->academicYear->name
|
||||
)
|
||||
]);
|
||||
})
|
||||
->searchable()
|
||||
->reactive()
|
||||
->live()
|
||||
->afterStateUpdated(function ($state) {
|
||||
$this->teacherSubjectId = $state;
|
||||
$this->loadStudents();
|
||||
|
||||
@ -6,11 +6,13 @@ use App\Filament\Resources\AttendancesResource\Pages;
|
||||
use App\Models\Attendances;
|
||||
use App\Models\ClassRoom;
|
||||
use App\Models\ClassStudent;
|
||||
use App\Models\HomeRoomTeacher;
|
||||
use App\Models\Student;
|
||||
use App\Models\Subject;
|
||||
use App\Models\TeacherSubject;
|
||||
use App\Models\User;
|
||||
use Filament\Forms;
|
||||
use Filament\Forms\Components\Select;
|
||||
use Filament\Forms\Form;
|
||||
use Filament\Resources\Resource;
|
||||
use Filament\Tables;
|
||||
@ -29,14 +31,38 @@ class AttendancesResource extends Resource
|
||||
->schema([
|
||||
Forms\Components\Section::make('Data Absensi')
|
||||
->schema([
|
||||
Forms\Components\Select::make('teacher_subject_id')
|
||||
Select::make('teacher_subject_id')
|
||||
->label('Teacher Subject')
|
||||
->required()
|
||||
->relationship('teacherSubject', 'id')
|
||||
->getOptionLabelFromRecordUsing(fn (TeacherSubject $record) =>
|
||||
$record->teacher->name . ' - ' . $record->subject->name . ' - ' . $record->class->class_name . ' - ' . $record->academicYear->name)
|
||||
->options(function () {
|
||||
$user = auth()->user();
|
||||
$query = TeacherSubject::with(['teacher', 'subject', 'class', 'academicYear']);
|
||||
|
||||
if ($user->hasRole('teacher')) {
|
||||
// Ambil ID kelas dimana user menjadi wali kelas
|
||||
$homeRoomClassIds = HomeRoomTeacher::where('teacher_id', $user->id)
|
||||
->pluck('class_room_id')
|
||||
->toArray();
|
||||
|
||||
$query->where(function($q) use ($user, $homeRoomClassIds) {
|
||||
// Mata pelajaran yang diajarkan oleh guru ini
|
||||
$q->where('teacher_id', $user->id)
|
||||
// ATAU kelas dimana dia menjadi wali kelas
|
||||
->orWhereIn('class_id', $homeRoomClassIds);
|
||||
});
|
||||
}
|
||||
|
||||
return $query->get()->mapWithKeys(fn ($item) => [
|
||||
$item->id => sprintf('%s - %s - %s - %s',
|
||||
$item->teacher->name,
|
||||
$item->subject->name,
|
||||
$item->class->class_name,
|
||||
$item->academicYear->name
|
||||
)
|
||||
]);
|
||||
})
|
||||
->searchable()
|
||||
->preload()
|
||||
->live()
|
||||
->afterStateUpdated(function (callable $set, $state) {
|
||||
if ($state) {
|
||||
$teacherSubject = TeacherSubject::find($state);
|
||||
@ -53,7 +79,7 @@ class AttendancesResource extends Resource
|
||||
->default(now())
|
||||
->live(),
|
||||
|
||||
Forms\Components\Select::make('student_id')
|
||||
Select::make('student_id')
|
||||
->label('Student')
|
||||
->required()
|
||||
->searchable()
|
||||
@ -77,7 +103,7 @@ class AttendancesResource extends Resource
|
||||
return $student ? $student->full_name . ' (' . $student->nis . ')' : null;
|
||||
}),
|
||||
|
||||
Forms\Components\Select::make('semester')
|
||||
Select::make('semester')
|
||||
->label('Semester')
|
||||
->required()
|
||||
->options([
|
||||
@ -85,7 +111,7 @@ class AttendancesResource extends Resource
|
||||
'second' => 'Second Semester'
|
||||
]),
|
||||
|
||||
Forms\Components\Select::make('status')
|
||||
Select::make('status')
|
||||
->label('Status')
|
||||
->required()
|
||||
->options([
|
||||
@ -161,10 +187,6 @@ class AttendancesResource extends Resource
|
||||
Tables\Columns\TextColumn::make('recorder.name')
|
||||
->label('Record by')
|
||||
->toggleable(),
|
||||
|
||||
Tables\Columns\TextColumn::make('notes')
|
||||
->label('Notes')
|
||||
->toggleable()
|
||||
])
|
||||
->filters([
|
||||
Tables\Filters\SelectFilter::make('status')
|
||||
@ -218,12 +240,9 @@ class AttendancesResource extends Resource
|
||||
])
|
||||
->bulkActions([
|
||||
Tables\Actions\BulkActionGroup::make([
|
||||
Tables\Actions\DeleteBulkAction::make(),
|
||||
Tables\Actions\DeleteBulkAction::make()->visible(fn () => auth()->user()->hasRole('super_admin') || auth()->user()->hasRole('teacher')),
|
||||
]),
|
||||
])
|
||||
->emptyStateActions([
|
||||
Tables\Actions\CreateAction::make(),
|
||||
])
|
||||
->defaultSort('date', 'desc')
|
||||
->groups([
|
||||
Tables\Grouping\Group::make('date')
|
||||
|
||||
@ -3,21 +3,43 @@
|
||||
namespace App\Filament\Resources\AttendancesResource\Pages;
|
||||
|
||||
use App\Filament\Resources\AttendancesResource;
|
||||
use App\Models\Attendances;
|
||||
use App\Models\HomeRoomTeacher;
|
||||
use Filament\Actions;
|
||||
use Filament\Resources\Pages\ListRecords;
|
||||
use Illuminate\Database\Eloquent\Builder;
|
||||
|
||||
class ListAttendances extends ListRecords
|
||||
{
|
||||
protected static string $resource = AttendancesResource::class;
|
||||
|
||||
protected function getTableQuery(): ?Builder
|
||||
{
|
||||
$user = auth()->user();
|
||||
|
||||
if ($user->hasRole('teacher')) {
|
||||
$homeRoomClassIds = HomeRoomTeacher::where('teacher_id', $user->id)
|
||||
->pluck('class_room_id')
|
||||
->toArray();
|
||||
return Attendances::with('teacherSubject', 'student')
|
||||
->whereHas('teacherSubject', function (Builder $query) use ($homeRoomClassIds, $user) {
|
||||
$query->where('teacher_id', $user->id)
|
||||
->orWhereIn('class_id', $homeRoomClassIds);
|
||||
});
|
||||
}
|
||||
|
||||
return Attendances::query();
|
||||
}
|
||||
|
||||
protected function getHeaderActions(): array
|
||||
{
|
||||
return [
|
||||
Actions\CreateAction::make(),
|
||||
Actions\CreateAction::make()->visible(fn () => auth()->user()->hasRole('super_admin')),
|
||||
Actions\Action::make('multiple')
|
||||
->label('Multiple Attendance')
|
||||
->url('attendances/multiple')
|
||||
->icon('heroicon-o-user-group'),
|
||||
->icon('heroicon-o-user-group')
|
||||
->visible(fn () => auth()->user()->hasRole('super_admin') || auth()->user()->hasRole('teacher')),
|
||||
];
|
||||
}
|
||||
}
|
||||
|
||||
@ -7,6 +7,7 @@ use App\Models\Assessment;
|
||||
use App\Models\Attendances;
|
||||
use App\Models\ClassRoom;
|
||||
use App\Models\ClassStudent;
|
||||
use App\Models\HomeRoomTeacher;
|
||||
use App\Models\Student;
|
||||
use App\Models\TeacherSubject;
|
||||
use Filament\Actions;
|
||||
@ -48,11 +49,33 @@ class MultipleAttendances extends Page
|
||||
Select::make('teacher_subject_id')
|
||||
->label('Teacher Subject')
|
||||
->required()
|
||||
->options(TeacherSubject::with(['teacher', 'subject', 'class'])
|
||||
->get()
|
||||
->mapWithKeys(fn ($item) => [
|
||||
$item->id => $item->teacher->name . ' - ' . $item->subject->name . ' - ' . $item->class->class_name . ' - ' . $item->academicYear->name
|
||||
]))
|
||||
->options(function () {
|
||||
$user = auth()->user();
|
||||
$query = TeacherSubject::with(['teacher', 'subject', 'class', 'academicYear']);
|
||||
|
||||
if ($user->hasRole('teacher')) {
|
||||
// Ambil ID kelas dimana user menjadi wali kelas
|
||||
$homeRoomClassIds = HomeRoomTeacher::where('teacher_id', $user->id)
|
||||
->pluck('class_room_id')
|
||||
->toArray();
|
||||
|
||||
$query->where(function($q) use ($user, $homeRoomClassIds) {
|
||||
// Mata pelajaran yang diajarkan oleh guru ini
|
||||
$q->where('teacher_id', $user->id)
|
||||
// ATAU kelas dimana dia menjadi wali kelas
|
||||
->orWhereIn('class_id', $homeRoomClassIds);
|
||||
});
|
||||
}
|
||||
|
||||
return $query->get()->mapWithKeys(fn ($item) => [
|
||||
$item->id => sprintf('%s - %s - %s - %s',
|
||||
$item->teacher->name,
|
||||
$item->subject->name,
|
||||
$item->class->class_name,
|
||||
$item->academicYear->name
|
||||
)
|
||||
]);
|
||||
})
|
||||
->searchable()
|
||||
->live()
|
||||
->afterStateUpdated(function ($state) {
|
||||
@ -135,28 +158,6 @@ class MultipleAttendances extends Page
|
||||
}
|
||||
|
||||
$this->students = $result;
|
||||
|
||||
// $this->students = ClassStudent::where('class_room_id', $this->teacherSubjectId)
|
||||
// ->where('academic_year_id', $this->teacherSubject->academic_year_id)
|
||||
// ->with('student')
|
||||
// ->get()
|
||||
// ->map(function ($student) {
|
||||
// $existingAttendance = Attendances::where('student_id', $student->student_id)
|
||||
// ->where('teacher_subject_id', $this->teacherSubjectId)
|
||||
// ->whereDate('date', $this->attendanceDate)
|
||||
// ->where('semester', $this->semester)
|
||||
// ->first();
|
||||
//
|
||||
// return [
|
||||
// 'id' => $student->student->id,
|
||||
// 'name' => $student->student->full_name,
|
||||
// 'nis' => $student->student->nis,
|
||||
// 'status' => $existingAttendance ? $existingAttendance->status : null,
|
||||
// 'attendance_id' => $existingAttendance ? $existingAttendance->id : null,
|
||||
// ];
|
||||
// })
|
||||
// ->values()
|
||||
// ->toArray();
|
||||
}
|
||||
|
||||
public function markAll($status): void
|
||||
|
||||
@ -6,6 +6,7 @@ use App\Filament\Resources\CompetencyAchievementResource\Pages;
|
||||
use App\Filament\Resources\CompetencyAchievementResource\RelationManagers;
|
||||
use App\Models\ClassRoom;
|
||||
use App\Models\CompetencyAchievement;
|
||||
use App\Models\HomeRoomTeacher;
|
||||
use App\Models\Subject;
|
||||
use Filament\Forms;
|
||||
use Filament\Forms\Form;
|
||||
@ -35,7 +36,20 @@ class CompetencyAchievementResource extends Resource
|
||||
Forms\Components\Select::make('class_room_id')
|
||||
->label('Class')
|
||||
->required()
|
||||
->options(ClassRoom::pluck('class_name', 'id')->toArray())
|
||||
->options(function () {
|
||||
$query = ClassRoom::query();
|
||||
|
||||
$user = auth()->user();
|
||||
|
||||
if ($user->hasAnyRole(['teacher'])) {
|
||||
$homeRoomTeacher = HomeRoomTeacher::where('teacher_id', $user->id)->first();
|
||||
if ($homeRoomTeacher) {
|
||||
$query->where('id', $homeRoomTeacher->class_room_id);
|
||||
}
|
||||
}
|
||||
|
||||
return $query->pluck('class_name', 'id')->toArray();
|
||||
})
|
||||
->searchable()
|
||||
->native(false),
|
||||
|
||||
@ -87,7 +101,7 @@ class CompetencyAchievementResource extends Resource
|
||||
])
|
||||
->bulkActions([
|
||||
Tables\Actions\BulkActionGroup::make([
|
||||
Tables\Actions\DeleteBulkAction::make(),
|
||||
Tables\Actions\DeleteBulkAction::make()->visible(fn () => auth()->user()->hasRole('super_admin') || auth()->user()->hasRole('teacher')),
|
||||
]),
|
||||
])
|
||||
->emptyStateActions([
|
||||
|
||||
@ -3,13 +3,30 @@
|
||||
namespace App\Filament\Resources\CompetencyAchievementResource\Pages;
|
||||
|
||||
use App\Filament\Resources\CompetencyAchievementResource;
|
||||
use App\Models\CompetencyAchievement;
|
||||
use App\Models\HomeRoomTeacher;
|
||||
use Filament\Actions;
|
||||
use Filament\Resources\Pages\ListRecords;
|
||||
use Illuminate\Database\Eloquent\Builder;
|
||||
|
||||
class ListCompetencyAchievements extends ListRecords
|
||||
{
|
||||
protected static string $resource = CompetencyAchievementResource::class;
|
||||
|
||||
protected function getTableQuery(): Builder
|
||||
{
|
||||
$user = auth()->user();
|
||||
|
||||
if ($user->hasRole('teacher')) {
|
||||
$homeRoomTeacher = HomeRoomTeacher::where('teacher_id', $user->id)->firstOrFail();
|
||||
if ($homeRoomTeacher) {
|
||||
return CompetencyAchievement::where('class_room_id', $homeRoomTeacher->class_room_id);
|
||||
}
|
||||
}
|
||||
|
||||
return CompetencyAchievement::query();
|
||||
}
|
||||
|
||||
protected function getHeaderActions(): array
|
||||
{
|
||||
return [
|
||||
|
||||
@ -7,14 +7,12 @@ use App\Filament\Resources\ExtracurricularAssessmentResource\RelationManagers;
|
||||
use App\Models\ClassStudent;
|
||||
use App\Models\Extracurricular;
|
||||
use App\Models\ExtracurricularAssessment;
|
||||
use App\Models\TeacherSubject;
|
||||
use App\Models\HomeRoomTeacher;
|
||||
use Filament\Forms;
|
||||
use Filament\Forms\Form;
|
||||
use Filament\Resources\Resource;
|
||||
use Filament\Tables;
|
||||
use Filament\Tables\Table;
|
||||
use Illuminate\Database\Eloquent\Builder;
|
||||
use Illuminate\Database\Eloquent\SoftDeletingScope;
|
||||
|
||||
class ExtracurricularAssessmentResource extends Resource
|
||||
{
|
||||
@ -27,14 +25,36 @@ class ExtracurricularAssessmentResource extends Resource
|
||||
public static function form(Form $form): Form
|
||||
{
|
||||
return $form
|
||||
->schema([
|
||||
->schema(components: [
|
||||
Forms\Components\Select::make('class_student_id')
|
||||
->relationship('classStudent', 'id') // atau gunakan relasi yang lebih deskriptif jika ada
|
||||
->getOptionLabelFromRecordUsing(fn (ClassStudent $record) =>
|
||||
$record->class->class_name . ' - ' . $record->student->full_name . ' - ' . $record->academicYear->name)
|
||||
->label('Siswa & Kelas')
|
||||
->options(function () {
|
||||
$user = auth()->user();
|
||||
$query = ClassStudent::with(['student', 'class']);
|
||||
|
||||
if ($user->hasAnyRole(['super_admin']))
|
||||
{
|
||||
return $query->get()->mapWithKeys(function ($cs) {
|
||||
return [
|
||||
$cs->id => $cs->student->full_name . ' - ' . $cs->class->class_name . ' - ' . $cs->academicYear->name,
|
||||
];
|
||||
});
|
||||
} else if ($user->hasAnyRole(['teacher'])) {
|
||||
$homeRoomTeacher = HomeRoomTeacher::where('teacher_id', $user->id)->firstOrFail();
|
||||
$query->whereHas('class', function ($query) use ($homeRoomTeacher) {
|
||||
$query->where('id', $homeRoomTeacher->class_room_id);
|
||||
});
|
||||
return $query->get()->mapWithKeys(function ($cs) {
|
||||
return [
|
||||
$cs->id => $cs->student->full_name . ' - ' . $cs->class->class_name . ' - ' . $cs->academicYear->name,
|
||||
];
|
||||
});
|
||||
} else {
|
||||
return [];
|
||||
}
|
||||
})
|
||||
->searchable()
|
||||
->preload()
|
||||
->required(),
|
||||
->preload(),
|
||||
|
||||
Forms\Components\Select::make('extracurricular_id')
|
||||
->relationship('extracurricular', 'name')
|
||||
@ -105,8 +125,11 @@ class ExtracurricularAssessmentResource extends Resource
|
||||
])
|
||||
->bulkActions([
|
||||
Tables\Actions\BulkActionGroup::make([
|
||||
Tables\Actions\DeleteBulkAction::make(),
|
||||
Tables\Actions\DeleteBulkAction::make()->visible(fn () => auth()->user()->hasRole('super_admin') || auth()->user()->hasRole('teacher')),
|
||||
]),
|
||||
])
|
||||
->emptyStateActions([
|
||||
Tables\Actions\CreateAction::make(),
|
||||
]);
|
||||
}
|
||||
|
||||
|
||||
@ -3,13 +3,32 @@
|
||||
namespace App\Filament\Resources\ExtracurricularAssessmentResource\Pages;
|
||||
|
||||
use App\Filament\Resources\ExtracurricularAssessmentResource;
|
||||
use App\Models\ExtracurricularAssessment;
|
||||
use App\Models\HomeRoomTeacher;
|
||||
use Filament\Actions;
|
||||
use Filament\Resources\Pages\ListRecords;
|
||||
use Illuminate\Database\Eloquent\Builder;
|
||||
|
||||
class ListExtracurricularAssessments extends ListRecords
|
||||
{
|
||||
protected static string $resource = ExtracurricularAssessmentResource::class;
|
||||
|
||||
protected function getTableQuery() : Builder
|
||||
{
|
||||
$user = auth()->user();
|
||||
|
||||
if ($user->hasRole('teacher')) {
|
||||
$homeRoomTeacher = HomeRoomTeacher::where('teacher_id', $user->id)->firstOrFail();
|
||||
return ExtracurricularAssessment::with('classStudent', 'extracurricular')
|
||||
->whereHas('classStudent', function (Builder $query) use ($homeRoomTeacher) {
|
||||
$query->where('class_room_id', $homeRoomTeacher->class_room_id)
|
||||
->where('academic_year_id', $homeRoomTeacher->academic_year_id);
|
||||
});
|
||||
} else {
|
||||
return ExtracurricularAssessment::query();
|
||||
}
|
||||
}
|
||||
|
||||
protected function getHeaderActions(): array
|
||||
{
|
||||
return [
|
||||
|
||||
@ -3,10 +3,53 @@
|
||||
namespace App\Filament\Resources\StudentResource\Pages;
|
||||
|
||||
use App\Filament\Resources\StudentResource;
|
||||
use App\Models\Student;
|
||||
use App\Models\User;
|
||||
use Filament\Actions;
|
||||
use Filament\Notifications\Notification;
|
||||
use Filament\Resources\Pages\CreateRecord;
|
||||
|
||||
class CreateStudent extends CreateRecord
|
||||
{
|
||||
protected static string $resource = StudentResource::class;
|
||||
|
||||
// protected function mutateFormDataBeforeCreate(array $data): array
|
||||
// {
|
||||
//// $user = User::firstOrCreate(
|
||||
//// ['email' => 'teacher@example.com'],
|
||||
//// [
|
||||
//// 'name' => 'teacher',
|
||||
//// 'password' => bcrypt('teacher'),
|
||||
//// ]
|
||||
//// );
|
||||
////
|
||||
// $birthDate = explode('-', $data['birth_date']);
|
||||
//
|
||||
//
|
||||
// $password = join("", $birthDate) . '-' . $data['nis'];
|
||||
//
|
||||
// $add = [
|
||||
// 'email' => $data['email'],
|
||||
// 'name' => $data['parent_name'],
|
||||
// 'password' => $password,
|
||||
// ];
|
||||
//
|
||||
// dd($add);
|
||||
// die;
|
||||
//
|
||||
// $exists = Student::where('name', $data['name'])
|
||||
// ->exists();
|
||||
//
|
||||
// if ($exists) {
|
||||
// Notification::make()
|
||||
// ->title('Failed to save')
|
||||
// ->body('A record already exists.')
|
||||
// ->danger()
|
||||
// ->send();
|
||||
//
|
||||
// $this->halt(); // Stop the save process
|
||||
// }
|
||||
//
|
||||
// return $data;
|
||||
// }
|
||||
}
|
||||
|
||||
@ -102,11 +102,11 @@ class UserResource extends Resource
|
||||
//
|
||||
])
|
||||
->actions([
|
||||
Tables\Actions\EditAction::make(),
|
||||
Tables\Actions\EditAction::make()->visible(fn () => auth()->user()->hasRole('super_admin')),
|
||||
])
|
||||
->bulkActions([
|
||||
Tables\Actions\BulkActionGroup::make([
|
||||
// Tables\Actions\DeleteBulkAction::make(),
|
||||
// Tables\Actions\DeleteBulkAction::make()->visible(fn () => auth()->user()->hasRole('super_admin')),
|
||||
]),
|
||||
])
|
||||
->emptyStateActions([
|
||||
|
||||
@ -13,7 +13,7 @@ class HomeRoomTeacherPolicy
|
||||
*/
|
||||
public function viewAny(User $user): bool
|
||||
{
|
||||
return $user->can('view_any_home::rome::teacher');
|
||||
return $user->can('view_any_home::room::teacher');
|
||||
}
|
||||
|
||||
/**
|
||||
@ -21,7 +21,7 @@ class HomeRoomTeacherPolicy
|
||||
*/
|
||||
public function view(User $user, HomeRoomTeacher $homeRomeTeacher): bool
|
||||
{
|
||||
return $user->can('view_home::rome::teacher');
|
||||
return $user->can('view_home::room::teacher');
|
||||
}
|
||||
|
||||
/**
|
||||
@ -29,7 +29,7 @@ class HomeRoomTeacherPolicy
|
||||
*/
|
||||
public function create(User $user): bool
|
||||
{
|
||||
return $user->can('create_home::rome::teacher');
|
||||
return $user->can('create_home::room::teacher');
|
||||
}
|
||||
|
||||
/**
|
||||
@ -37,7 +37,7 @@ class HomeRoomTeacherPolicy
|
||||
*/
|
||||
public function update(User $user, HomeRoomTeacher $homeRomeTeacher): bool
|
||||
{
|
||||
return $user->can('update_home::rome::teacher');
|
||||
return $user->can('update_home::room::teacher');
|
||||
}
|
||||
|
||||
/**
|
||||
@ -45,7 +45,7 @@ class HomeRoomTeacherPolicy
|
||||
*/
|
||||
public function delete(User $user, HomeRoomTeacher $homeRomeTeacher): bool
|
||||
{
|
||||
return $user->can('delete_home::rome::teacher');
|
||||
return $user->can('delete_home::room::teacher');
|
||||
}
|
||||
|
||||
/**
|
||||
@ -53,7 +53,7 @@ class HomeRoomTeacherPolicy
|
||||
*/
|
||||
public function restore(User $user, HomeRoomTeacher $homeRomeTeacher): bool
|
||||
{
|
||||
return $user->can('restore_home::rome::teacher');
|
||||
return $user->can('restore_home::room::teacher');
|
||||
}
|
||||
|
||||
/**
|
||||
@ -61,6 +61,6 @@ class HomeRoomTeacherPolicy
|
||||
*/
|
||||
public function forceDelete(User $user, HomeRoomTeacher $homeRomeTeacher): bool
|
||||
{
|
||||
return $user->can('force_delete_home::rome::teacher');
|
||||
return $user->can('force_delete_home::room::teacher');
|
||||
}
|
||||
}
|
||||
|
||||
3007
package-lock.json
generated
Normal file
3007
package-lock.json
generated
Normal file
File diff suppressed because it is too large
Load Diff
@ -12,6 +12,6 @@
|
||||
"laravel-vite-plugin": "^1.2.0",
|
||||
"postcss": "^8.4.47",
|
||||
"tailwindcss": "^3.4.13",
|
||||
"vite": "^6.0.11"
|
||||
"vite": "^6.3.5"
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user