Perubahan yang dilakukan: **Controller MemoController:** - Menambahkan MemoController untuk mengelola memo penyelesaian permohonan. - Method index() untuk menampilkan daftar permohonan yang bisa dipilih. - Method create() untuk form pembuatan memo dengan pemilihan data bulk. - Method store() untuk menyimpan memo dan mengupdate status permohonan terkait. - Method show() untuk menampilkan detail memo yang telah dibuat. - Method dataForDatatables() untuk API datatables dengan filter, search, dan pagination. - Implementasi DB transaction untuk menjaga integritas data. - Logging dan error handling komprehensif di setiap method. **View Template:** - index.blade.php: Tabel data permohonan dengan fitur checkbox selection (bulk). - create.blade.php: Form pembuatan memo dari data yang dipilih. - show.blade.php: Halaman detail memo penyelesaian. - Menggunakan Bootstrap untuk styling dan interaksi dinamis dengan JavaScript. - Validasi client-side untuk memastikan data sesuai sebelum dikirim. **Routing dan Navigasi:** - Menambahkan route resource untuk operasi CRUD Memo. - Menambahkan route khusus untuk datatables API dan bulk create. - Integrasi menu "Memo Penyelesaian" di navigasi utama aplikasi. - Role-based access control untuk keamanan akses fitur. **Integrasi Data:** - Menggunakan model Permohonan sebagai sumber data utama dengan eager loading. - Relasi dengan tabel user, debitur, branch, dan tujuan penilaian. - Menambahkan status management untuk mempermudah tracking progress permohonan. **Keamanan dan Validasi:** - Validasi input baik di sisi controller maupun client-side. - CSRF protection dan XSS prevention untuk menjaga keamanan aplikasi. - Permission checking sesuai level user. **Performance dan UX:** - Pagination dan query optimization untuk performa lebih baik. - Caching strategi untuk data yang sering diakses. - Interface yang intuitif, dengan loading state dan feedback message. - Responsive design untuk desktop dan mobile. - Shortcut keyboard untuk efisiensi power user. **Teknis dan Testing:** - Struktur kode mengikuti Laravel best practice dan design pattern. - Siap untuk unit test dan integration test. - Logging lengkap untuk monitoring dan debugging. - Error scenario handling dan fallback yang robust. Tujuan perubahan: - Menyediakan fitur pengelolaan memo penyelesaian permohonan secara bulk dengan user experience yang optimal dan performa efisien.
306 lines
14 KiB
PHP
306 lines
14 KiB
PHP
@extends('layouts.main')
|
|
|
|
@section('content')
|
|
<div class="grid gap-5 mx-auto w-full lg:gap-7.5">
|
|
<!-- Header -->
|
|
<div class="card">
|
|
<div class="card-header">
|
|
<h3 class="card-title">
|
|
Detail Memo Penyelesaian
|
|
</h3>
|
|
<div class="flex items-center gap-2">
|
|
<a href="{{ route('memo.index') }}" class="btn btn-sm btn-light">
|
|
<i class="ki-filled ki-black-left"></i>
|
|
Kembali
|
|
</a>
|
|
<button onclick="window.print()" class="btn btn-sm btn-primary">
|
|
<i class="ki-filled ki-printer"></i>
|
|
Cetak
|
|
</button>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Detail Memo -->
|
|
<div class="card">
|
|
<div class="card-header bg-gray-50">
|
|
<h4 class="card-title text-lg">
|
|
Informasi Memo Penyelesaian
|
|
</h4>
|
|
</div>
|
|
|
|
<div class="card-body">
|
|
<div class="grid grid-cols-1 lg:grid-cols-2 gap-6 mb-8">
|
|
<div class="space-y-4">
|
|
<div>
|
|
<label class="text-sm font-medium text-gray-600">Judul Memo:</label>
|
|
<p class="text-gray-900 font-semibold mt-1">
|
|
{{ $permohonan->memo_penyelesaian_title ?? 'Belum ada memo' }}
|
|
</p>
|
|
</div>
|
|
|
|
<div>
|
|
<label class="text-sm font-medium text-gray-600">Tanggal Memo:</label>
|
|
<p class="text-gray-900 mt-1">
|
|
@if($permohonan->memo_penyelesaian_date)
|
|
{{ \Carbon\Carbon::parse($permohonan->memo_penyelesaian_date)->format('d F Y') }}
|
|
@else
|
|
-
|
|
@endif
|
|
</p>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="space-y-4">
|
|
<div>
|
|
<label class="text-sm font-medium text-gray-600">Status:</label>
|
|
<p class="mt-1">
|
|
@if($permohonan->status === 'memo-penyelesaian')
|
|
<span class="badge badge-success uppercase">{{ $permohonan->status }}</span>
|
|
@else
|
|
<span class="badge badge-warning uppercase">{{ $permohonan->status }}</span>
|
|
@endif
|
|
</p>
|
|
</div>
|
|
|
|
<div>
|
|
<label class="text-sm font-medium text-gray-600">Dibuat Pada:</label>
|
|
<p class="text-gray-900 mt-1">
|
|
@if($permohonan->memo_penyelesaian_created_at)
|
|
{{ \Carbon\Carbon::parse($permohonan->memo_penyelesaian_created_at)->format('d F Y H:i') }}
|
|
@else
|
|
-
|
|
@endif
|
|
</p>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
@if($permohonan->memo_penyelesaian_content)
|
|
<div class="mb-8">
|
|
<label class="text-sm font-medium text-gray-600 mb-3 block">Isi Memo:</label>
|
|
<div class="p-4 bg-gray-50 rounded-lg border">
|
|
<div class="prose max-w-none">
|
|
{!! nl2br(e($permohonan->memo_penyelesaian_content)) !!}
|
|
</div>
|
|
</div>
|
|
</div>
|
|
@endif
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Detail Permohonan -->
|
|
<div class="card">
|
|
<div class="card-header bg-blue-50">
|
|
<h4 class="card-title text-lg">
|
|
Detail Permohonan
|
|
</h4>
|
|
</div>
|
|
|
|
<div class="card-body">
|
|
<div class="grid grid-cols-1 lg:grid-cols-2 gap-6">
|
|
<div class="space-y-4">
|
|
<div>
|
|
<label class="text-sm font-medium text-gray-600">Nomor Registrasi:</label>
|
|
<p class="text-gray-900 font-semibold mt-1">{{ $permohonan->nomor_registrasi }}</p>
|
|
</div>
|
|
|
|
<div>
|
|
<label class="text-sm font-medium text-gray-600">Debitur:</label>
|
|
<p class="text-gray-900 mt-1">{{ $permohonan->debiture->name ?? '-' }}</p>
|
|
</div>
|
|
|
|
<div>
|
|
<label class="text-sm font-medium text-gray-600">Cabang/Direktorat:</label>
|
|
<p class="text-gray-900 mt-1">{{ $permohonan->branch->name ?? '-' }}</p>
|
|
</div>
|
|
|
|
<div>
|
|
<label class="text-sm font-medium text-gray-600">Account Officer:</label>
|
|
<p class="text-gray-900 mt-1">{{ $permohonan->user->name ?? '-' }}</p>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="space-y-4">
|
|
<div>
|
|
<label class="text-sm font-medium text-gray-600">Tujuan Penilaian:</label>
|
|
<p class="mt-1">
|
|
@if($permohonan->tujuanPenilaian)
|
|
<span class="badge badge-primary">{{ $permohonan->tujuanPenilaian->name }}</span>
|
|
@else
|
|
-
|
|
@endif
|
|
</p>
|
|
</div>
|
|
|
|
<div>
|
|
<label class="text-sm font-medium text-gray-600">Fasilitas Kredit:</label>
|
|
<p class="text-gray-900 mt-1">{{ $permohonan->jenisFasilitasKredit->name ?? '-' }}</p>
|
|
</div>
|
|
|
|
<div>
|
|
<label class="text-sm font-medium text-gray-600">Tanggal Permohonan:</label>
|
|
<p class="text-gray-900 mt-1">
|
|
@if($permohonan->tanggal_permohonan)
|
|
{{ \Carbon\Carbon::parse($permohonan->tanggal_permohonan)->format('d F Y') }}
|
|
@else
|
|
-
|
|
@endif
|
|
</p>
|
|
</div>
|
|
|
|
@if($permohonan->nilai_liquidasi)
|
|
<div>
|
|
<label class="text-sm font-medium text-gray-600">Nilai Liquidasi:</label>
|
|
<p class="text-gray-900 font-semibold mt-1">
|
|
Rp {{ number_format($permohonan->nilai_liquidasi, 0, ',', '.') }}
|
|
</p>
|
|
</div>
|
|
@endif
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Informasi Penilaian -->
|
|
@if($permohonan->penilaian)
|
|
<div class="card">
|
|
<div class="card-header bg-green-50">
|
|
<h4 class="card-title text-lg">
|
|
Informasi Penilaian
|
|
</h4>
|
|
</div>
|
|
|
|
<div class="card-body">
|
|
<div class="grid grid-cols-1 lg:grid-cols-2 gap-6">
|
|
<div class="space-y-4">
|
|
@if($permohonan->penilaian->waktu_penilaian)
|
|
<div>
|
|
<label class="text-sm font-medium text-gray-600">Waktu Penilaian:</label>
|
|
<p class="text-gray-900 mt-1">
|
|
{{ \Carbon\Carbon::parse($permohonan->penilaian->waktu_penilaian)->format('d F Y H:i') }}
|
|
</p>
|
|
</div>
|
|
@endif
|
|
|
|
@if($permohonan->penilai)
|
|
<div>
|
|
<label class="text-sm font-medium text-gray-600">Tipe Penilai:</label>
|
|
<p class="mt-1">
|
|
<span class="badge badge-info uppercase">{{ $permohonan->penilai->type_penilai ?? '-' }}</span>
|
|
</p>
|
|
</div>
|
|
@endif
|
|
</div>
|
|
|
|
<div class="space-y-4">
|
|
@if($permohonan->penilaian->created_at)
|
|
<div>
|
|
<label class="text-sm font-medium text-gray-600">Dibuat Pada:</label>
|
|
<p class="text-gray-900 mt-1">
|
|
{{ \Carbon\Carbon::parse($permohonan->penilaian->created_at)->format('d F Y H:i') }}
|
|
</p>
|
|
</div>
|
|
@endif
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
@endif
|
|
|
|
<!-- Informasi Approval -->
|
|
<div class="card">
|
|
<div class="card-header bg-yellow-50">
|
|
<h4 class="card-title text-lg">
|
|
Status Approval
|
|
</h4>
|
|
</div>
|
|
|
|
<div class="card-body">
|
|
<div class="grid grid-cols-1 lg:grid-cols-3 gap-6">
|
|
<div class="text-center p-4 border rounded-lg">
|
|
<div class="mb-2">
|
|
@if($permohonan->approval_so_at)
|
|
<i class="ki-filled ki-check-circle text-3xl text-green-500"></i>
|
|
@else
|
|
<i class="ki-filled ki-time text-3xl text-gray-400"></i>
|
|
@endif
|
|
</div>
|
|
<h5 class="font-semibold text-gray-900">Senior Officer</h5>
|
|
<p class="text-sm text-gray-600 mt-1">
|
|
@if($permohonan->approval_so_at)
|
|
Disetujui pada<br>
|
|
{{ \Carbon\Carbon::parse($permohonan->approval_so_at)->format('d F Y H:i') }}
|
|
@else
|
|
Menunggu Persetujuan
|
|
@endif
|
|
</p>
|
|
</div>
|
|
|
|
<div class="text-center p-4 border rounded-lg">
|
|
<div class="mb-2">
|
|
@if($permohonan->approval_eo_at)
|
|
<i class="ki-filled ki-check-circle text-3xl text-green-500"></i>
|
|
@else
|
|
<i class="ki-filled ki-time text-3xl text-gray-400"></i>
|
|
@endif
|
|
</div>
|
|
<h5 class="font-semibold text-gray-900">Executive Officer</h5>
|
|
<p class="text-sm text-gray-600 mt-1">
|
|
@if($permohonan->approval_eo_at)
|
|
Disetujui pada<br>
|
|
{{ \Carbon\Carbon::parse($permohonan->approval_eo_at)->format('d F Y H:i') }}
|
|
@else
|
|
Menunggu Persetujuan
|
|
@endif
|
|
</p>
|
|
</div>
|
|
|
|
<div class="text-center p-4 border rounded-lg">
|
|
<div class="mb-2">
|
|
@if($permohonan->approval_dd_at)
|
|
<i class="ki-filled ki-check-circle text-3xl text-green-500"></i>
|
|
@else
|
|
<i class="ki-filled ki-time text-3xl text-gray-400"></i>
|
|
@endif
|
|
</div>
|
|
<h5 class="font-semibold text-gray-900">Deputy Director</h5>
|
|
<p class="text-sm text-gray-600 mt-1">
|
|
@if($permohonan->approval_dd_at)
|
|
Disetujui pada<br>
|
|
{{ \Carbon\Carbon::parse($permohonan->approval_dd_at)->format('d F Y H:i') }}
|
|
@else
|
|
Menunggu Persetujuan
|
|
@endif
|
|
</p>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
@endsection
|
|
|
|
@push('styles')
|
|
<style>
|
|
@media print {
|
|
.btn, .card-header .flex {
|
|
display: none !important;
|
|
}
|
|
|
|
.card {
|
|
box-shadow: none !important;
|
|
border: 1px solid #e5e7eb !important;
|
|
margin-bottom: 1rem !important;
|
|
}
|
|
|
|
body {
|
|
font-size: 12px !important;
|
|
}
|
|
|
|
.card-title {
|
|
font-size: 16px !important;
|
|
font-weight: bold !important;
|
|
}
|
|
}
|
|
</style>
|
|
@endpush |