feat(lampiran-dokumen): tambahkan fitur upload, download, dan delete lampiran dokumen

- Menambahkan controller LampiranDokumenController untuk mengelola lampiran dokumen.
- Menambahkan model LampiranDokumen untuk interaksi dengan tabel lampiran_dokumen.
- Membuat migrasi untuk tabel lampiran_dokumen dengan kolom yang diperlukan.
- Menambahkan rute untuk mengupload, mendownload, dan menghapus lampiran dokumen.
- Memperbarui tampilan detail-jaminan untuk menampilkan dan mengelola lampiran dokumen.
This commit is contained in:
Daeng Deni Mardaeni
2025-03-09 10:49:51 +07:00
parent 9619b74695
commit 33667ede21
6 changed files with 224 additions and 9 deletions

View File

@@ -0,0 +1,67 @@
<?php
namespace Modules\Lpj\Models;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Storage;
class LampiranDokumen extends Base
{
protected $table = 'lampiran_dokumen';
protected $fillable = ['permohonan_id', 'nama_file', 'path_file', 'keterangan'];
public function permohonan()
{
return $this->belongsTo(Permohonan::class);
}
/**
* Upload lampiran dokumen for penilai or administrator
*
* @param int $permohonanId
* @param array $fileData
* @return LampiranDokumen|null
*/
public static function uploadLampiran($fileData)
{
$user = Auth::user();
if ($user && ($user->hasRole('penilai') || $user->hasRole('administrator'))) {
$file = $fileData['file'];
$keterangan = $fileData['keterangan'] ?? null;
$fileName = $fileData['nama_file'] ?? time() . '_' . $file->getClientOriginalName();
$filePath = $file->storeAs('lampiran_dokumen', $fileName, 'public');
return self::create([
'permohonan_id' => $fileData['permohonan_id'] ?? null,
'nama_file' => $fileName,
'path_file' => $filePath,
'keterangan' => $keterangan,
]);
}
return null;
}
/**
* Delete lampiran dokumen
*
* @return bool
*/
public function deleteLampiran()
{
$user = Auth::user();
if ($user && ($user->hasRole('penilai') || $user->hasRole('administrator'))) {
// Delete the file from storage
Storage::disk('public')->delete($this->path_file);
// Delete the database record
return $this->delete();
}
return false;
}
}

View File

@@ -161,7 +161,8 @@
return $this->belongsTo(JenisFasilitasKredit::class);
}
public function jenisPenilaian(){
public function jenisPenilaian()
{
return $this->belongsTo(JenisPenilaian::class);
}
@@ -170,7 +171,8 @@
return $this->belongsTo(Penilaian::class, 'nomor_registrasi', 'nomor_registrasi');
}
public function penilai(){
public function penilai()
{
return $this->belongsTo(Penilai::class, 'id', 'permohonan_id');
}
@@ -199,27 +201,38 @@
return $this->hasMany(DokumenJaminan::class);
}
public function pembatalan(){
public function pembatalan()
{
return $this->hasMany(PermohonanPembatalan::class);
}
public function approveBayar(){
public function approveBayar()
{
return $this->belongsTo(User::class, 'approve_bayar_by', 'id');
}
public function approveEo(){
public function approveEo()
{
return $this->belongsTo(User::class, 'approval_eo', 'id');
}
public function approveDd(){
public function approveDd()
{
return $this->belongsTo(User::class, 'approval_dd', 'id');
}
public function approveSo(){
public function approveSo()
{
return $this->belongsTo(User::class, 'approval_so', 'id');
}
public function authorization(){
public function authorization()
{
return $this->belongsTo(Authorization::class, 'id', 'permohonan_id');
}
public function lampiranDokumen()
{
return $this->hasMany(LampiranDokumen::class);
}
}