Melakukan refactor dan penyesuaian form memo penyelesaian agar lebih sesuai dengan kebutuhan bisnis, serta menambahkan fitur perhitungan otomatis Total Biaya PJ. Perubahan pada Form Input: - Mengubah field "Judul Memo" menjadi "Nomor Memo" untuk identifikasi memo yang lebih spesifik. - Menghapus field "Isi Memo" karena tidak relevan dengan proses bisnis saat ini. - Menambahkan field "Tanggal Pembayaran" untuk tracking proses pembayaran. - Mengatur "Tanggal Memo" menjadi otomatis mengikuti tanggal hari ini dan disimpan sebagai hidden field untuk keperluan audit. - Menambahkan field readonly "Total Biaya PJ" untuk menampilkan akumulasi biaya dari NOC terkait permohonan yang dipilih. Perubahan pada Controller: - Mengupdate validasi request agar sesuai dengan field baru: `memo_number`, `payment_date`, dan `permohonan_ids`. - Menghapus validasi `memo_content` karena field tersebut tidak lagi digunakan. - Menambahkan method `getTotalBiayaPJ()` untuk endpoint AJAX yang menghitung total biaya PJ secara real-time. - Menggunakan relasi model `Noc` dan `Permohonan` untuk menghitung sum dari `nominal_bayar`. - Mengupdate method `create()` agar langsung menghitung total biaya PJ saat form dibuka. - Tetap menggunakan DB transaction untuk memastikan integritas data. Perubahan pada Database Schema: - Mengganti field `memo_penyelesaian_title` menjadi `memo_penyelesaian_number`. - Menghapus field `memo_penyelesaian_content`. - Menambahkan field baru `memo_penyelesaian_payment_date` untuk menyimpan tanggal pembayaran. - Mempertahankan field `memo_penyelesaian_date` sebagai audit trail. Perubahan pada View: - Menambahkan field readonly "Total Biaya PJ" dengan format mata uang Rupiah. - Menambahkan icon kalkulator dan styling sesuai dengan tema form. - Menggunakan AJAX untuk menghitung total biaya PJ ketika user memilih atau mengubah permohonan secara dinamis. - Menampilkan pesan error dan feedback user secara jelas jika terjadi masalah saat perhitungan. Routing dan API: - Menambahkan route `memo.total-biaya-pj` sebagai endpoint untuk kalkulasi biaya PJ berbasis AJAX. - Tetap menggunakan route resource untuk operasi CRUD memo penyelesaian. Keamanan dan Validasi: - Implementasi CSRF protection untuk AJAX request. - Validasi `permohonan_ids` harus berupa array yang valid dan terfilter dengan baik. - Penanganan error yang komprehensif baik di sisi controller maupun client-side. Peningkatan User Experience: - Form menjadi lebih sederhana, efisien, dan fokus pada input yang memang dibutuhkan oleh proses bisnis. - Real-time feedback saat memilih permohonan sehingga user langsung mengetahui total biaya PJ. - Layout form tetap responsive dan mudah digunakan di berbagai perangkat. - Memberikan pengalaman yang konsisten dengan desain aplikasi lainnya. Tujuan Perubahan: - Menyederhanakan proses pembuatan memo penyelesaian sesuai kebutuhan operasional terbaru. - Memastikan proses input lebih cepat dan akurat dengan kalkulasi otomatis Total Biaya PJ. - Mengurangi potensi kesalahan input dan mempercepat workflow divisi terkait. - Meningkatkan maintainability dan konsistensi kode dengan standar sistem yang ada.
314 lines
14 KiB
PHP
314 lines
14 KiB
PHP
@extends('layouts.main')
|
|
|
|
@section('breadcrumbs')
|
|
{{ Breadcrumbs::render('memo.show') }}
|
|
@endsection
|
|
|
|
@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 gap-2 items-center">
|
|
<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="bg-gray-50 card-header">
|
|
<h4 class="text-lg card-title">
|
|
Informasi Memo Penyelesaian
|
|
</h4>
|
|
</div>
|
|
|
|
<div class="card-body">
|
|
<div class="grid grid-cols-1 gap-6 mb-8 lg:grid-cols-2">
|
|
<div class="space-y-4">
|
|
<div>
|
|
<label class="text-sm font-medium text-gray-600">Judul Memo:</label>
|
|
<p class="mt-1 font-semibold text-gray-900">
|
|
{{ $permohonan->memo_penyelesaian_title ?? 'Belum ada memo' }}
|
|
</p>
|
|
</div>
|
|
|
|
<div>
|
|
<label class="text-sm font-medium text-gray-600">Tanggal Memo:</label>
|
|
<p class="mt-1 text-gray-900">
|
|
@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="uppercase badge badge-success">{{ $permohonan->status }}</span>
|
|
@else
|
|
<span class="uppercase badge badge-warning">{{ $permohonan->status }}</span>
|
|
@endif
|
|
</p>
|
|
</div>
|
|
|
|
<div>
|
|
<label class="text-sm font-medium text-gray-600">Dibuat Pada:</label>
|
|
<p class="mt-1 text-gray-900">
|
|
@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="block mb-3 text-sm font-medium text-gray-600">Isi Memo:</label>
|
|
<div class="p-4 bg-gray-50 rounded-lg border">
|
|
<div class="max-w-none prose">
|
|
{!! nl2br(e($permohonan->memo_penyelesaian_content)) !!}
|
|
</div>
|
|
</div>
|
|
</div>
|
|
@endif
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Detail Permohonan -->
|
|
<div class="card">
|
|
<div class="bg-blue-50 card-header">
|
|
<h4 class="text-lg card-title">
|
|
Detail Permohonan
|
|
</h4>
|
|
</div>
|
|
|
|
<div class="card-body">
|
|
<div class="grid grid-cols-1 gap-6 lg:grid-cols-2">
|
|
<div class="space-y-4">
|
|
<div>
|
|
<label class="text-sm font-medium text-gray-600">Nomor Registrasi:</label>
|
|
<p class="mt-1 font-semibold text-gray-900">{{ $permohonan->nomor_registrasi }}</p>
|
|
</div>
|
|
|
|
<div>
|
|
<label class="text-sm font-medium text-gray-600">Debitur:</label>
|
|
<p class="mt-1 text-gray-900">{{ $permohonan->debiture->name ?? '-' }}</p>
|
|
</div>
|
|
|
|
<div>
|
|
<label class="text-sm font-medium text-gray-600">Cabang/Direktorat:</label>
|
|
<p class="mt-1 text-gray-900">{{ $permohonan->branch->name ?? '-' }}</p>
|
|
</div>
|
|
|
|
<div>
|
|
<label class="text-sm font-medium text-gray-600">Account Officer:</label>
|
|
<p class="mt-1 text-gray-900">{{ $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="mt-1 text-gray-900">{{ $permohonan->jenisFasilitasKredit->name ?? '-' }}</p>
|
|
</div>
|
|
|
|
<div>
|
|
<label class="text-sm font-medium text-gray-600">Tanggal Permohonan:</label>
|
|
<p class="mt-1 text-gray-900">
|
|
@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="mt-1 font-semibold text-gray-900">
|
|
Rp {{ number_format($permohonan->nilai_liquidasi, 0, ',', '.') }}
|
|
</p>
|
|
</div>
|
|
@endif
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Informasi Penilaian -->
|
|
@if ($permohonan->penilaian)
|
|
<div class="card">
|
|
<div class="bg-green-50 card-header">
|
|
<h4 class="text-lg card-title">
|
|
Informasi Penilaian
|
|
</h4>
|
|
</div>
|
|
|
|
<div class="card-body">
|
|
<div class="grid grid-cols-1 gap-6 lg:grid-cols-2">
|
|
<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="mt-1 text-gray-900">
|
|
{{ \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="uppercase badge badge-info">{{ $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="mt-1 text-gray-900">
|
|
{{ \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="bg-yellow-50 card-header">
|
|
<h4 class="text-lg card-title">
|
|
Status Approval
|
|
</h4>
|
|
</div>
|
|
|
|
<div class="card-body">
|
|
<div class="grid grid-cols-1 gap-6 lg:grid-cols-3">
|
|
<div class="p-4 text-center rounded-lg border">
|
|
<div class="mb-2">
|
|
@if ($permohonan->approval_so_at)
|
|
<i class="text-3xl text-green-500 ki-filled ki-check-circle"></i>
|
|
@else
|
|
<i class="text-3xl text-gray-400 ki-filled ki-time"></i>
|
|
@endif
|
|
</div>
|
|
<h5 class="font-semibold text-gray-900">Senior Officer</h5>
|
|
<p class="mt-1 text-sm text-gray-600">
|
|
@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="p-4 text-center rounded-lg border">
|
|
<div class="mb-2">
|
|
@if ($permohonan->approval_eo_at)
|
|
<i class="text-3xl text-green-500 ki-filled ki-check-circle"></i>
|
|
@else
|
|
<i class="text-3xl text-gray-400 ki-filled ki-time"></i>
|
|
@endif
|
|
</div>
|
|
<h5 class="font-semibold text-gray-900">Executive Officer</h5>
|
|
<p class="mt-1 text-sm text-gray-600">
|
|
@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="p-4 text-center rounded-lg border">
|
|
<div class="mb-2">
|
|
@if ($permohonan->approval_dd_at)
|
|
<i class="text-3xl text-green-500 ki-filled ki-check-circle"></i>
|
|
@else
|
|
<i class="text-3xl text-gray-400 ki-filled ki-time"></i>
|
|
@endif
|
|
</div>
|
|
<h5 class="font-semibold text-gray-900">Deputy Director</h5>
|
|
<p class="mt-1 text-sm text-gray-600">
|
|
@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
|