feat: enhance LetterRequestService and UI to support lecturer information; update pagination and column display for improved clarity
This commit is contained in:
parent
db56ec94ea
commit
80997b97b4
@ -14,10 +14,11 @@ class LetterRequestService
|
||||
public function paginated(User $user, int $perPage = 25, string $search = '', ?string $status = null): LengthAwarePaginator
|
||||
{
|
||||
return LetterRequest::query()
|
||||
->with(['user.profile', 'user.student.department', 'processor.profile'])
|
||||
->with(['user.profile', 'user.student.department', 'user.lecturer.departments', '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}%"))))
|
||||
->orWhereHas('student', fn ($q) => $q->where('student_number', 'like', "%{$search}%"))
|
||||
->orWhereHas('lecturer', fn ($q) => $q->where('lecturer_number', 'like', "%{$search}%"))))
|
||||
->when($status, fn ($q) => $q->where('status', $status))
|
||||
->when($user->hasRole(UserRole::Mahasiswa->value) || $user->hasRole(UserRole::Dosen->value), fn ($q) => $q->where('user_id', $user->id))
|
||||
->latest()
|
||||
|
||||
@ -49,10 +49,15 @@ export function createLetterRequestColumns(
|
||||
|
||||
const columns: ColumnDef<LetterRequest>[] = [
|
||||
{
|
||||
accessorKey: 'user.student.student_number',
|
||||
header: () => <span>Mahasiswa</span>,
|
||||
id: 'requester',
|
||||
header: () => <span>Pemohon</span>,
|
||||
cell: ({ row }) => {
|
||||
const user = row.original.user;
|
||||
const identifier = user?.student
|
||||
? `${user.student.student_number} · ${user.student.department?.name ?? '-'}`
|
||||
: user?.lecturer
|
||||
? `${user.lecturer.lecturer_number} · ${user.lecturer.departments.map((d) => d.name).join(', ') || '-'}`
|
||||
: '-';
|
||||
|
||||
return (
|
||||
<div>
|
||||
@ -60,8 +65,7 @@ export function createLetterRequestColumns(
|
||||
{user?.profile?.full_name ?? 'N/A'}
|
||||
</p>
|
||||
<p className="text-xs text-muted-foreground">
|
||||
{user?.student?.student_number} ·{' '}
|
||||
{user?.student?.department?.name ?? '-'}
|
||||
{identifier}
|
||||
</p>
|
||||
</div>
|
||||
);
|
||||
|
||||
@ -212,7 +212,7 @@ export default function LetterRequestIndex({
|
||||
}}
|
||||
title="Hapus Surat Permohonan"
|
||||
description={(letterRequest) =>
|
||||
`Apakah Anda yakin ingin menghapus permohonan "${letterRequest.letter_type}" milik "${letterRequest.user?.profile?.full_name ?? 'mahasiswa ini'}"? Tindakan ini tidak dapat dibatalkan.`
|
||||
`Apakah Anda yakin ingin menghapus permohonan "${letterRequest.letter_type}" milik "${letterRequest.user?.profile?.full_name ?? 'pemohon ini'}"? Tindakan ini tidak dapat dibatalkan.`
|
||||
}
|
||||
onConfirm={handleDelete}
|
||||
/>
|
||||
@ -237,7 +237,7 @@ function LetterRequestFields({
|
||||
<Input
|
||||
id="letter_type"
|
||||
name="letter_type"
|
||||
placeholder="Contoh: Surat Aktif Kuliah"
|
||||
placeholder="Contoh: Surat Aktif Kuliah, Surat Tugas"
|
||||
defaultValue={editing?.letter_type ?? ''}
|
||||
aria-invalid={!!errors.letter_type}
|
||||
/>
|
||||
|
||||
@ -21,6 +21,10 @@ export type LetterRequestUser = {
|
||||
student_number: string;
|
||||
department: { id: number; name: string } | null;
|
||||
} | null;
|
||||
lecturer: {
|
||||
lecturer_number: string;
|
||||
departments: { id: number; name: string }[];
|
||||
} | null;
|
||||
};
|
||||
|
||||
export type LetterRequestProcessor = {
|
||||
|
||||
Loading…
Reference in New Issue
Block a user