feat: update LetterRequestController and LetterRequestService to accept User parameter for improved access control; add letter request permissions in RolePermissionSeeder
This commit is contained in:
parent
1c901e9103
commit
aa50487bfc
@ -23,6 +23,7 @@ public function index(PaginatedRequest $request): Response
|
||||
{
|
||||
return Inertia::render('admin/services/letter-requests/index', [
|
||||
'letterRequests' => $this->service->paginated(
|
||||
$request->user(),
|
||||
...$request->validatedWithDefaults(),
|
||||
status: $request->validated('status'),
|
||||
),
|
||||
|
||||
@ -3,26 +3,25 @@
|
||||
namespace App\Services\Admin\Services;
|
||||
|
||||
use App\Enums\LetterStatus;
|
||||
use App\Enums\UserRole;
|
||||
use App\Models\LetterRequest;
|
||||
use App\Models\User;
|
||||
use Illuminate\Contracts\Pagination\LengthAwarePaginator;
|
||||
use Illuminate\Http\UploadedFile;
|
||||
|
||||
class LetterRequestService
|
||||
{
|
||||
public function paginated(int $perPage = 25, string $search = '', ?string $status = null): LengthAwarePaginator
|
||||
public function paginated(User $user, int $perPage = 25, string $search = '', ?string $status = null): LengthAwarePaginator
|
||||
{
|
||||
$user = auth()->user();
|
||||
|
||||
return LetterRequest::query()
|
||||
->select(['id', 'user_id', 'letter_type', 'purpose', 'status', 'processed_by', 'submitted_at', 'completed_at'])
|
||||
->with(['user.profile', 'user.student.department', 'processor.profile'])
|
||||
->when($search, fn ($q) => $q->where('letter_type', 'like', "%{$search}%")
|
||||
->orWhereHas('user', fn ($q) => $q->whereHas('profile', fn ($q) => $q->where('full_name', 'like', "%{$search}%"))
|
||||
->orWhereHas('student', fn ($q) => $q->where('student_number', 'like', "%{$search}%"))))
|
||||
->when($status, fn ($q) => $q->where('status', $status))
|
||||
->when($user->hasRole('mahasiswa'), fn ($q) => $q->where('user_id', $user->id))
|
||||
->when($user->hasRole(UserRole::Mahasiswa->value) || $user->hasRole(UserRole::Dosen->value), fn ($q) => $q->where('user_id', $user->id))
|
||||
->latest()
|
||||
->paginate($perPage);
|
||||
->paginate($perPage, ['id', 'user_id', 'letter_type', 'purpose', 'status', 'processed_by', 'submitted_at', 'completed_at']);
|
||||
}
|
||||
|
||||
public function create(array $data): LetterRequest
|
||||
@ -38,9 +37,10 @@ public function create(array $data): LetterRequest
|
||||
|
||||
public function update(LetterRequest $letterRequest, array $data): LetterRequest
|
||||
{
|
||||
$letterRequest->letter_type = $data['letter_type'];
|
||||
$letterRequest->purpose = $data['purpose'] ?? null;
|
||||
$letterRequest->update();
|
||||
$letterRequest->update([
|
||||
'letter_type' => $data['letter_type'],
|
||||
'purpose' => $data['purpose'] ?? null,
|
||||
]);
|
||||
|
||||
return $letterRequest;
|
||||
}
|
||||
@ -54,12 +54,13 @@ public function updateStatus(LetterRequest $letterRequest, ?string $status, ?Upl
|
||||
{
|
||||
$status = $result ? LetterStatus::Completed->value : $status;
|
||||
|
||||
$letterRequest->status = $status;
|
||||
$letterRequest->processed_by = $status !== LetterStatus::Submitted->value ? auth()->id() : null;
|
||||
$letterRequest->completed_at = $status === LetterStatus::Completed->value
|
||||
? ($letterRequest->completed_at ?? now())
|
||||
: null;
|
||||
$letterRequest->update();
|
||||
$letterRequest->update([
|
||||
'status' => $status,
|
||||
'processed_by' => $status !== LetterStatus::Submitted->value ? auth()->id() : null,
|
||||
'completed_at' => $status === LetterStatus::Completed->value
|
||||
? ($letterRequest->completed_at ?? now())
|
||||
: null,
|
||||
]);
|
||||
|
||||
if ($result) {
|
||||
$letterRequest->addMedia($result)->toMediaCollection('letter_result');
|
||||
|
||||
@ -75,6 +75,10 @@ public function run(): void
|
||||
'view-attendances',
|
||||
'create-attendances',
|
||||
'delete-attendances',
|
||||
'view-letter-requests',
|
||||
'create-letter-requests',
|
||||
'update-letter-requests',
|
||||
'delete-letter-requests',
|
||||
...$feedbackSelfService,
|
||||
],
|
||||
'staff-admin' => [
|
||||
|
||||
Loading…
Reference in New Issue
Block a user