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
|
public function paginated(User $user, int $perPage = 25, string $search = '', ?string $status = null): LengthAwarePaginator
|
||||||
{
|
{
|
||||||
return LetterRequest::query()
|
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}%")
|
->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('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($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))
|
->when($user->hasRole(UserRole::Mahasiswa->value) || $user->hasRole(UserRole::Dosen->value), fn ($q) => $q->where('user_id', $user->id))
|
||||||
->latest()
|
->latest()
|
||||||
|
|||||||
@ -49,10 +49,15 @@ export function createLetterRequestColumns(
|
|||||||
|
|
||||||
const columns: ColumnDef<LetterRequest>[] = [
|
const columns: ColumnDef<LetterRequest>[] = [
|
||||||
{
|
{
|
||||||
accessorKey: 'user.student.student_number',
|
id: 'requester',
|
||||||
header: () => <span>Mahasiswa</span>,
|
header: () => <span>Pemohon</span>,
|
||||||
cell: ({ row }) => {
|
cell: ({ row }) => {
|
||||||
const user = row.original.user;
|
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 (
|
return (
|
||||||
<div>
|
<div>
|
||||||
@ -60,8 +65,7 @@ export function createLetterRequestColumns(
|
|||||||
{user?.profile?.full_name ?? 'N/A'}
|
{user?.profile?.full_name ?? 'N/A'}
|
||||||
</p>
|
</p>
|
||||||
<p className="text-xs text-muted-foreground">
|
<p className="text-xs text-muted-foreground">
|
||||||
{user?.student?.student_number} ·{' '}
|
{identifier}
|
||||||
{user?.student?.department?.name ?? '-'}
|
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
|
|||||||
@ -212,7 +212,7 @@ export default function LetterRequestIndex({
|
|||||||
}}
|
}}
|
||||||
title="Hapus Surat Permohonan"
|
title="Hapus Surat Permohonan"
|
||||||
description={(letterRequest) =>
|
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}
|
onConfirm={handleDelete}
|
||||||
/>
|
/>
|
||||||
@ -237,7 +237,7 @@ function LetterRequestFields({
|
|||||||
<Input
|
<Input
|
||||||
id="letter_type"
|
id="letter_type"
|
||||||
name="letter_type"
|
name="letter_type"
|
||||||
placeholder="Contoh: Surat Aktif Kuliah"
|
placeholder="Contoh: Surat Aktif Kuliah, Surat Tugas"
|
||||||
defaultValue={editing?.letter_type ?? ''}
|
defaultValue={editing?.letter_type ?? ''}
|
||||||
aria-invalid={!!errors.letter_type}
|
aria-invalid={!!errors.letter_type}
|
||||||
/>
|
/>
|
||||||
|
|||||||
@ -21,6 +21,10 @@ export type LetterRequestUser = {
|
|||||||
student_number: string;
|
student_number: string;
|
||||||
department: { id: number; name: string } | null;
|
department: { id: number; name: string } | null;
|
||||||
} | null;
|
} | null;
|
||||||
|
lecturer: {
|
||||||
|
lecturer_number: string;
|
||||||
|
departments: { id: number; name: string }[];
|
||||||
|
} | null;
|
||||||
};
|
};
|
||||||
|
|
||||||
export type LetterRequestProcessor = {
|
export type LetterRequestProcessor = {
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user